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

七.
new Integer(1) // 这种是不走缓存的

只有执行了Integer.valueof(1) 这个方法才会走缓存

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容