new Integer("127") 总是创建新对象,无论值是多少。Integer.valueOf("128") 创建新对象是因为 128...
大于127,小于-128会为false。这是因为默认情况下JVM会把 [-128,127]这个区间的Integer给缓存起来,当我们定义Integer的时候,如果位于这个区间,就不会去创建一个新的对象,而是返回缓存中的对象。所以位于该区间的Integer通过等于号判断会是相等的,因为是同一个对象。查看Integer源码,可以看到Integer缓存操作 再查看...
Integer 类在缓存数据时的范围是 [-128, 127] 。这意味着在这个范围内的整数会被缓存,而超过这个范围的整数每次都会创建新的对象。这种缓存机制可以提高性能和节省内存。在使用 Integer 类时,需要注意以下几点:比较整数对象时,应使用 equals() 方法而不是 == 运算符。因为超出缓存范围的整数会被创建为新的对...
里面内容讲的很明白,最大为127,如果大于127就new一个新的Integer,如果小于127则引用同一个 privatestaticclassIntegerCache {staticfinalintlow = -128;staticfinalinthigh;staticfinalInteger cache[];static{//high value may be configured by propertyinth = 127; String integerCacheHighPropValue=sun.misc.VM.ge...
return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 我大概的翻译一下啊, 数再-128到127之间,就直接在缓存里取。否则就返回一个新对象。 哦哦这下问题解决了 转自:https://www.cnblogs.com/smellpawn/p/10825199.html...
相等原因:Integer的取值范围是-128~127 第二个使用"=="判断Integer a2 = new Integer(127) 和 Integer b2 = new Integer(127) 不相等原因:装箱时,java为了提高效率,IntegerCache类中有一个数组将-128<=i<=127范围之内的数据打包成缓存里的Integer对象了,因此不用new,这个区间里的值用直接=赋值方法得到的变量...
Integer的127与128:报错代码: Integer a1 = 127; Integer b1 = 127; if(a1==b1){ System.out.println("相等"); }else{ System.out.println("不等"); } Integer a = 128; Integer b = 128; if(a==b){ System.out.println("相等"); }else{ System.out.println("不等"); } 运行结果是: ...
而按照Javadoc文档,该缓存机制默认会缓存在 -128 到 127 之间的值,不在该区间的值并不会进行缓存。所以,给Integer i赋值的大小不同,比较的结果也可能会不同。4.5 ==和equals的区别 最后我们再做一个实验,来看看==与equals比较两个Integer对象时有什么不同。从该实验中可以看出,==比较时,较小的两个...
在-128~127的Integer值并且以Integer x = value;的方式赋值的Integer值在进行==和equals比较时,都会返回true,因为Java里面对处在在-128~127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128~127的范围,进行==比较时...
127);所以第一种情况实际发生的是Integer i1 = 127;<---Integer.valueOf(127);Integer i2 = 127...