参考 《java高级程序员面试宝典》
1、不可变类
String 有两种存储方式:
String str = "Hello"; //存储在常量池中 不可变
String str2 = new String("Hello"); // 存储在内存(堆空间)中
注: 如果一个类成员不是不可变类,要想不受原对象影响,可以调用.clone()方法
2Java基础数据类型存不下、不可变类的优劣
优势:不可变类具有使用简单、线程安全、节省内存等优点
缺点:不可变类的对象因为值的不同而产生新的对象,从而导致无法预料的问题。
3、“==”、equals与hashcode
参考:https://blog.csdn.net/_/article/details/
1)如果是基本数据类型那么就用==比较
2)如果是引用类型的话,想按照自己的方式去比较,就要重写这个类中的equals方法,
如果没有重写,那么equals和==比较的效果是一样的,都是比较引用的地址值。
3)如果是比较字符串,那么直接用equals就可以了,因为String类里面已经重写了equals方法,
比较的时候字符串的内容,而不是引用的地址值了。
hashcode方法的返回值与equals方法的关系: 如果x.equals(y)返回true,即两个对象根据equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashcode必须产生
同样的结果。如果x.equals(y)返回false,那么hashcode有可能相等有可能不等。反过来,hashcode返回值不等,那么equals一定不等,而hashcode相等,equals可能可不等。
也就是equals比hashcode判断相等更为严格。
4、值传递和引用传递
值传递,传递的为实参的拷贝;引用传递,传递的为地址
如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

5、java中的关键字
static 参考6_面向对象-下-关键字:stattic
可以用来修饰的结构: 属性、方法、代码块、内部类
静态变量随着类的加载而加载,可以通过“类.静态变量”的方式进行调用
静态变量的加载要早于对象的创建
由于类指挥加载一次,则静态变量在内存中也只会存在一份-----存在方法去的静态域中
注意:在静态的方法内,不能使用this关键字、super关键字
final
用来修饰 类、属性、方法,分别表示属性不可变、方法不可覆盖、类不可被继承
注意:一个类不能即被声明为abstract,又被声明为final
transient
用transient关键字标记的成员变量不参与序列化过程。

volatile
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/7507.html