在Java中,Integer
类会对一些数值进行缓存,这样可以节省内存并提高性能。当你使用 Integer.valueOf(int)
方法来创建 Integer
对象时,对于数值在 -128 到 127 之间的整数,Java 会返回缓存中的对象实例。因此,对于这些范围内的整数,用 Integer.valueOf
创建的 Integer
对象实际上会引用同一个实例。
在你的示例代码中:
Integer i = Integer.valueOf(100);
Integer j = Integer.valueOf(100);
System.out.println(i == j);
由于100在 -128 到 127 的范围内,i
和 j
都会引用同一个 Integer
对象。因此,i == j
会返回 true
。
但是,如果你使用超过这个范围的整数,Integer.valueOf
会创建新的对象,因此它们的引用会不同。例如:
Integer i = Integer.valueOf(200);
Integer j = Integer.valueOf(200);
System.out.println(i == j); // 这将打印false
这是因为200超出了 -128 到 127 的缓存范围,i
和 j
会引用不同的 Integer
对象。
总结
- 对于 -128 到 127 之间的整数,使用
Integer.valueOf
会返回缓存中的对象实例,因此i == j
为true
。 - 对于超出 -128 到 127 范围的整数,
Integer.valueOf
会创建新的对象实例,因此i == j
为false
。
如果要比较 Integer
对象的值,推荐使用 equals
方法,而不是 ==
运算符:
System.out.println(i.equals(j)); // 比较值是否相等
标签:Java,对象,valueOf,基础,127,128,Integer
From: https://www.cnblogs.com/DCFV/p/18337801