阅读说明
如有任何疑问或者错误,可以博文私信作者,或添加微信 YY20203_24 备注 文章错误
抛出问题
常见的面试问法
== 与 equals 方法的区别
自己想到的知识点
== 两边有基本数据类型时,比较的是数值
== 两边都是类对象时,比较的是对象地址
equals 是类的方法,比较值是否相等,可由类本身进行处理,比如基本数据类型的equal先判断是否是本类型与值是否相等
一时能想到的点,肯定不全面或者get不到面试官想要你说出的点,下面我们再来学习一遍
基础介绍
常见的自动装箱、自动拆箱
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
// 自动装箱
list.add(i);
}
for (int i = 0; i < 10; i++) {
System.out.println("分割线---------------------------");
// 自动拆箱
int a= list.get(i);
}
深入学习
自动装箱、拆箱与集合结合使用的场景讨论
每个值的添加、获取都需要进行装箱拆箱,当集合长度大时,可考虑使用数组进行操作
jvm缓存与自动装箱
// Example 3: special case - arises due to autoboxing in Java
Integer obj1 = 1; // autoboxing will call Integer.valueOf()
Integer obj2 = 1; // same call to Integer.valueOf() will return same
// cached Object
System.out.println("obj1 == obj2 : " + (obj1 == obj2)); // true
Integer obj3 = 169; // autoboxing will call Integer.valueOf()
Integer obj4 = 169; // same call to Integer.valueOf() will return same
// cached Object
System.out.println("obj3 == obj4 : " + (obj3 == obj4)); // false
obj1和obj2的初始化都发生了自动装箱操作。但是处于节省内存的考虑,JVM会缓存-128到127的Integer对象。因为obj1和obj2实际上是同一个对象。所以使用”==“比较返回true
注意点
如果是包装类之间的 == 运算,在没有算数运算的情况下不会自动拆箱,比较的是对象地址。遇到算数运算时会进行自动拆箱,比较数值。
如果是包装类和基本类型之间的 == 比较,包装类会拆箱后比较(此处涉及拆箱,需考虑空指针问题)
包装类的equals(Object)方法是不处理数据转型关系的,如Long.equals(Integer.value(3)),类型不一致就会返回false
总结
内容不多,主要是整理出一个思路,方便大家面试和回忆此处的知识点
思绪图
题外话
关注我的工作外生活
公众号搜索 杨方刚的生活录
摸鱼搜索 魔芋办公室