大于127,小于-128会为false。这是因为默认情况下JVM会把 [-128,127]这个区间的Integer给缓存起来,当我们定义Integer的时候,如果位于这个区间,就不会去创建一个新的对象,而是返回缓存中的对象。所以位于该区间的Integer通过等于号判断会是相等的,因为是同一个对象。查看Integer源码,可以看到Integer缓存操作 再查看...
new Integer("127") 不使用缓存。Integer.valueOf("128") 也不使用缓存,但原因不同(超出范围)。3...
Integer a1= 127; Integer a2 = 127; 因为 IntegerCache中已经存在此对象,直接返回引用,引用相等并且都指向缓存中的数据,所以这时候a1 == a2返回true。 Integer a1 = 128; Integer a2 = 128;因为a1,a2的值大于127,不在[-128, 127]范围内,所以虚拟机会在堆中重新new一个 Integer对象来存放128,创建两个对象...
通过源码和注释可以看到 如果是-128到127之间的整数,则会使用整数缓存对象,否则就new一个整形对象。因此第一个是true,第二个是false。反汇编 前面讲到了,用到了 再问一个问题 为什么调用了 java.lang.Integer#valueOf(int) ?我们直接反汇编:javap -c IntTest Compiled from "IntTest.java"publicclass...
第一个使用"=="判断 Integer a1 = 127 和 Integer b1 = 127 相等原因:Integer的取值范围是-128~127 第二个使用"=="判断Integer a2 = new Integer(127) 和 Integer b2 = new Integer(127) 不相等原因:装箱时,java为了提高效率,IntegerCache类中有一个数组将-128<=i<=127范围之内的数据打包成缓存里的Int...
## 原因: 因为在Integer.class文件中,有一个静态内部类IntegerCache; 会在系统加载时,将(low = -128到h = 127)之间的数据提前包装成Integer对象放入数组cache中; ```java Integer a = 111; Integer c = 111;
5 127 127 189568618 189568618 6 128 128 793589513 1313922862 7 129 129 495053715 1922154895 竟然... 竟然从0到127不同时候自动装箱得到的是同一个对象!从128开始才是正常情况。 那看看源码 /** * Returns an {@code Integer} instance representing the specified * {@...
Integer在小于-128到127可以看似是值类型,超过这个范围后,会变成引用类型 Integer与int对比的时候会自动拆箱成int,再进行对比 综合上面,我开始有个一个疑问: 代码语言:javascript 复制 Integer i1=140;Integer i2=i1;i1++;System.out.println(i2);System.out.println(i2==i1); ...
一个字节或介于\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p...
一、在-128~127范围内的Integer对象 1、以 Integer x = value 的方式赋值,只是进行int原生数据类型的数值比较 2、使用new操作创建新对象 ...