通过上面的饼状图可以看出,大于128的整数值比较中,有一半的情况是值相等的,另一半情况是值不相等的。 总结 在Java中,对于整数值大于128的Integer对象比较,不能直接使用==来判断两个对象的值是否相等,而应该使用equals方法。这是因为大于128的整数值每次创建新的对象,对象引用不同。 通过本文的介绍和示例,希望读者能更好地理解Java中Integer对象的比较规则,避免...
1.如果Integer类型的两个数相等,如果范围在-128~127(默认),那么用“==”返回true,其余的范会false。 2.两个基本类型int进行相等比较,直接用==即可。 3.一个基本类型int和一个包装类型Integer比较,用==也可,比较时候,Integer类型做了拆箱操作。 4.Integer类型比较大小,要么调用Integer.intValue()转为基本类型用...
看看IntegerCache的源码:在其static块中就一次性生成了-128到127直接的Integer类型变量存储在cache[]中,对于-128到127之间的int类型,返回的都是同一个Integer类型对象。 整个工作过程就是:Integer.class在装载(Java虚拟机启动)时,其内部类型IntegerCache的static块即开始执行,实例化并暂存数值在-128到127之间的Integer类...
通过翻看jdk源码,你会发现:如果要创建的 Integer 对象的值在 -128 到 127 之间,会从 IntegerCache 类中直接返回,否则才调用 new Integer方法创建。所以只要数值是正的Integer > 127,则会new一个新的对象。 数值 <= 127时会直接从Cache中获取到同一个对象。public static Integer valueOf(int i) { if...
输出: false class D { public static void main(String args[]) { Integer b2=127; Integer b3=127; System.out.println(b2==b3); } } 输出: true 注意:-128 到 127 之间的数字为真。 原文由 vipin k. 发布,翻译遵循 CC BY-SA 4.0 许可协议 java...
1 public static Integer valueOf(int i) { 2 if(i >= -128 && i <= IntegerCache.high) 3 return IntegerCache.cache[i + 128]; 4 else 5 return new Integer(i); 6 } 1. 2. 3. 4. 5. 6. 通过看源码能够知道,整数类型在-128~127之间时,会使用缓存,造成的效果就是,如果已经创建了一个相...
大于127,小于-128会为false。这是因为默认情况下JVM会把 [-128,127]这个区间的Integer给缓存起来,当我们定义Integer的时候,如果位于这个区间,就不会去创建一个新的对象,而是返回缓存中的对象。所以位于该区间的Integer通过等于号判断会是相等的,因为是同一个对象。查看Integer源码,可以看到Integer缓存操作 再查看...
"equals()"方法:equals()方法用于比较两个对象的值是否相等。对于Integer对象,equals()方法会比较它们的数值是否相等,而不是它们的引用是否相同。 3. Integer缓存机制对比较的影响 Java对-128到127之间的Integer对象进行了缓存。这意味着,当我们创建这个范围内的Integer对象时,Java可能会返回缓存中的对象,而不是创建...
因为Integer实现的时候 对于-128 到127之间的值会做缓存处理 比如 Integer i=100,j=100;那么j实际上就是指向的i,因为i缓存了 如果Integer i=200,j=200;这时候不会缓存,会新建一个对象200,所以第一次 i==j为真 第二次 i==j为假 ...
奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true?在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。1. int与integer的基本使用对比(1) Integer是int的包装类;int是基本数据类型; (2) Integer变量必须实例化后才能使用;int变量不需要; (3) Integer实际是对象的...