注1:
int a = 11;
if (a != null) {
System.out.println(11111);
}
这种编译就报错,基本类型不能和null比较
注2:
包装类Integer和基础类型int 相等的比较,在排除null干扰后,建议直接使用==,因为Integer会自己拆箱
注3:两个Integer类型,在排除null后,应该使用equals方法比较是否相等,用==是会出错的
一.int Integer new Integer区别
详解:https://cloud.tencent.com/developer/article/1493262
Integer a = new Integer(900); // 栈里面有一个变量a,a里面保存了一个地址,该地址指向堆,堆里面有一块地址保存了900.
二. 方法区中整数型常量池 : 范围是在 [-128,127] 之间
详解:https://blog.csdn.net/weixin_41362471/article/details/109277451
三. 把int基本类型转成包装类,不要用new Integer已被放弃了 ,要用Integer.valueof()方法
详解:https://ask.csdn.net/questions/1103306
四. Integer.valueOf()源码 和 Integer 的equals 方法源码
Integer a = 100;
变量a里面保存的是地址值,是缓存100的地址值
- Integer.valueOf()源码
int a = 11;
Integer integer = Integer.valueOf(a);
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)]; // 注意,这个地方是返回地址值得,IntegerCache.cache就是个数组,保存的都是地址值
return new Integer(i);
}
2.equa源码ls
Integer a = 11;
Integer b = 22;
a.equals(b);
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
五. 数值类型自动装箱 和 自动拆箱的源码
Integer i =100; //自动装箱 Integer i = Integer.valueOf(100);
int t = i; //自动拆箱 int t = i.intValue();
https://blog.csdn.net/qq_40981730/article/details/81949793
https://blog.csdn.net/qq_35324400/article/details/103620865
自动拆箱:调用Integer的intValue()方法获取到了Integer的int类型的value值
六.Integer对象,不能随便使用==来比较
https://blog.csdn.net/weixin_33750452/article/details/91831383
网友评论