`
jessdy
  • 浏览: 62122 次
  • 性别: Icon_minigender_1
  • 来自: 上海虹口区
社区版块
存档分类
最新评论

java的Integer比较果然很妖

    博客分类:
  • Java
 
阅读更多
首先:
public static void main(String []args) {
     Integer a = 100;
     Integer b = 100;
     System.out.println(a==b);   //true
   }

public static void main(String []args) {
     Integer a = 200;
     Integer b = 200;
     System.out.println(a==b);   //false
   }

原因:
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3。在jdk源码中
public static Integer valueOf(int i) { 
final int offset = 128; 
if (i >= -128 && i <= 127) { // must cache 
return IntegerCache.cache[i + offset]; 
} 
return new Integer(i); 
} 


private static class IntegerCache { 
private IntegerCache(){} 
static final Integer cache[] = new Integer[-(-128) + 127 + 1]; 
static { 
for(int i = 0; i < cache.length; i++) 
cache = new Integer(i - 128); 
} 
} 

这边是java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
再加一句
Integer a = 100;
a++;
//这边a++是新创建了一个对象,不是以前的对象。
    public static void main(String []args) {
        Integer a = 100;
        Integer b = a;
        a++;
        System.out.println(a==b);
    }

打印就是false
对于127--128没有多大关系,但是在这范围之外就影响性能了吧
分享到:
评论
2 楼 sophia_230 2008-03-20  
比较方法确实很奇怪
1 楼 movingboy 2008-03-20  
JDK初始化了127--128并不意味着可以在两个Integer之间使用==进行比较,是你自己要这样用

相关推荐

    java-features:Java 8功能测试

    Java 8是Java编程语言的一个重大更新,引入了许多新特性,极大地提升了开发效率和代码的可读性。其中,最重要的一个特性就是Lambda表达式(Lambdas),这正是"java-features:Java 8功能测试"这个项目的核心所在。...

    MulticastSocket实现多眯广播

    socket.setsockopt(socket.INADDR_ANY, socket.IP_MULTICAST_TTL, new Integer(255)); // 设置TTL ``` 2. **加入多点广播组**:使用`joinGroup()`方法加入多点广播组,传入一个`InetAddress`对象代表多点广播地址。...

    Lab-1型铸造

    5. 深入理解装箱和拆箱:Java中的包装类(如Integer、Double等)提供了自动装箱和拆箱功能,这使得基本类型与引用类型可以无缝交互。学习者需要理解何时会发生自动装箱和拆箱,以及可能导致的性能影响。 6. 错误...

    CustomImmutableClassExample_1

    在Java编程中,"CustomImmutableClassExample_1"很可能是关于如何创建自定义不可变类的一个示例项目。不可变类是一种特殊的类,其对象一旦被创建,就不能再改变其状态。这种设计模式广泛用于提高代码的安全性、并发...

    SchemaBasedJsonGenerator:基于简单模式的 JSON 数据生成器

    SchemaBasedJsonGenerator 基于简单模式的 JSON 数据生成器。 快速生成用于工作负载测试的随机 json 数据。 使用美妙的 DataFactory 和 LatLng 库。...{ "integer":"getInt(10,20)", "email":"getEmail()", "latitud

Global site tag (gtag.js) - Google Analytics