Integer包装类的种种
程序员文章站
2024-03-07 13:26:33
...
Integer包装类的种种
Integer的构造方法
>Integer i=new Integer(String s);
>Integer i1=new Integer(int i);
s必须为数字字符串Integer i2=1; //自动装箱底层用了new Integer(i)
不论是自动装箱底层调用new Integer(int i),还是直接new Integer(int i).
底层都会调用valueOf(Int i) 方法,并不只是每次创建对象都在堆内存里创建对象那么简单,为什么包装不同的数,以下代码的结果不同呢?
public class MyInteger {
public static void main(String[] args) {
Integer i1=new Integer(1);
Integer i2=1;
System.out.println(i1==i2); //true
Integer i3=128;
Integer i4=128;
System.out.println(i3==i4); //false
}
}
这可能就要看看valueOf的源码了
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
从源码中可以发现传入的int会被检测在不在一个范围内,这个范围就是-128~127
如果满足这个条件会直接得到一个从数组中取出来的Integer对象,所以地址是相同的,而当不在这个范围的数传入的时候,就每调用一次创建一个对象,对于引用数据类型==是比较地址值的所以结果为false;
上一篇: nginx 一路学习下来总结
下一篇: 计算机系统原理实验:模型机(三)IR部分
推荐阅读
-
Integer包装类的种种
-
Java基础学习笔记13——(StringBuffer的使用,数组高级,Arrays工具类,Integer和Character等包装类)
-
Java8增强的包装类
-
Java包装器类的作用好处及图解
-
int和Integer的区别与联系:包装类、自动拆箱装箱、享元模式
-
Java基本数据类型与对应的包装类(动力节点java学院整理)
-
Java基本数据类型与对应的包装类(动力节点java学院整理)
-
Java基本类型包装类概述与Integer类、Character类用法分析
-
java中Integer包装类装箱的一个细节详解
-
java中如何判断对象中每一个字段都为空_重新认识Java的包装类