首先:
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没有多大关系,但是在这范围之外就影响性能了吧
分享到:
- 2008-03-20 10:53
- 浏览 5132
- 评论(2)
- 论坛回复 / 浏览 (2 / 3069)
- 查看更多
相关推荐
Java 8是Java编程语言的一个重大更新,引入了许多新特性,极大地提升了开发效率和代码的可读性。其中,最重要的一个特性就是Lambda表达式(Lambdas),这正是"java-features:Java 8功能测试"这个项目的核心所在。...
socket.setsockopt(socket.INADDR_ANY, socket.IP_MULTICAST_TTL, new Integer(255)); // 设置TTL ``` 2. **加入多点广播组**:使用`joinGroup()`方法加入多点广播组,传入一个`InetAddress`对象代表多点广播地址。...
5. 深入理解装箱和拆箱:Java中的包装类(如Integer、Double等)提供了自动装箱和拆箱功能,这使得基本类型与引用类型可以无缝交互。学习者需要理解何时会发生自动装箱和拆箱,以及可能导致的性能影响。 6. 错误...
在Java编程中,"CustomImmutableClassExample_1"很可能是关于如何创建自定义不可变类的一个示例项目。不可变类是一种特殊的类,其对象一旦被创建,就不能再改变其状态。这种设计模式广泛用于提高代码的安全性、并发...
SchemaBasedJsonGenerator 基于简单模式的 JSON 数据生成器。 快速生成用于工作负载测试的随机 json 数据。 使用美妙的 DataFactory 和 LatLng 库。...{ "integer":"getInt(10,20)", "email":"getEmail()", "latitud