int、Integer 、new Integer区别

注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的地址值

  1. 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_32379477/article/details/111664536?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

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

你可能感兴趣的:(int、Integer 、new Integer区别)