public class WrapperTest {
public static void main(String[] args) {
Integer i = 100;
Integer j = 100;
if(i == j)
System.out.println("same");
else
System.out.println("not same");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出的输出same运行时,但是,如果我们改变的值i,并j以1000的输出变化not same.在我为SCJP做准备时,需要明确这个概念.有人可以解释这种行为.谢谢.
Ros*_*oss 20
在Java中,-128和127(包括)之间的整数通常由相同的Integer对象实例表示.这是通过使用一个名为IntegerCache的内部类(包含在Integer类中,并在调用Integer.valueOf()时或在自动装箱期间使用)来处理的:
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[i] = new Integer(i - 128);
}
}
Run Code Online (Sandbox Code Playgroud)
另见:http://www.owasp.org/index.php/Java_gotchas
@tunaranch是对的.它也与此Python问题中的问题相同.要点是Java为-128到127之间的整数保留一个对象(Python确实为-5到256),并且每次请求时都返回相同的对象.如果你要求在这个固定范围之外的整数,它每次都会给你一个新的对象.
(回想一下,==返回两个对象实际上是否相同,同时equals比较它们的内容.)
如果值p被装箱是
true,false,一byte,一个char范围内的\u0000到\u007f,或一个int或-128和127之间的短号码,然后让 R1和R2是p中的任意两个装箱转换的结果.始终是r1 == r2的情况.
请注意,这也描述了其他类型的情况.
| 归档时间: |
|
| 查看次数: |
4737 次 |
| 最近记录: |