我想在Longs 上测试'=='运算符,这就是我发现的:以下代码:
public static void main(final String[] args) {
final Long n = 0L;
final Long m = 0L;
System.out.println(n + " == " + m + " : " + (n == m));
final Long a = 127L;
final Long b = 127L;
System.out.println(a + " == " + b + " : " + (a == b));
final Long A = 128L;
final Long B = 128L;
System.out.println(A + " == " + B + " : " + (A == B));
final Long x = -128L;
final Long y = -128L;
System.out.println(x + " == " + y + " : " + (x == y));
final Long X = -129L;
final Long Y = -129L;
System.out.println(X + " == " + Y + " : " + (X == Y));
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 == 0 : true
127 == 127 : true
128 == 128 : false
-128 == -128 : true
-129 == -129 : false
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一解释是JVM将所有long值存储[-128, 127]在Perm空间中,并将它们的地址提供给Longs以及上述范围之外的所有值,它为代码中遇到的每个静态值创建一个新的分配.
我接近正确吗?我们在什么情况下必须注意类似的行为?
PS.我知道我应该使用null支票然后.equals()比较对象,但我很好奇是否有人知道答案.
编辑
在jtahlborn回答谁给我关键字自动拳击后,我发现这篇伟大的文章有充分记录的答案
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |