为什么下面的代码对于long3 == long2比较返回false,即使它是文字的.
public class Strings {
public static void main(String[] args) {
Long long1 = 256L + 256L;
Long long2 = 512L;
Long long3 = 512L;
System.out.println(long3 == long2);
System.out.println(long1.equals(long2));
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ach 63
Long是一个对象,而不是一个原始对象.通过使用==您比较参考值.
你需要这样做:
if(str.equals(str2))
Run Code Online (Sandbox Code Playgroud)
正如你在第二次比较中所做的那样.
编辑:我明白了......你在想其他对象就像String文字一样.他们不*.即使如此,你永远要使用==有String任何文字.
(*Autobox类型确实实现了flyweight模式,但仅适用于-128 - > 127的值.如果你做的Long相同,50你确实会有两个对同一flyweight对象的引用.再次,永远不要使用==来比较它们.)
编辑添加:这在Java语言规范的第5.1.7节中有具体说明:
如果被装箱值p为真,假,字节,或在范围\ u0000的一个char到\ u007f,或int或-128和127(含)之间的短号码,然后让r1和r2是的结果p的任何两个拳击转换.始终是r1 == r2的情况.
请注意,long是没有明确提及,但目前甲骨文和OpenJDK的实现方式做到这一点(1.6和1.7),这是另一个原因从未使用==
Long l = 5L;
Long l2 = 5L;
System.out.println(l == l2);
l = 5000L;
l2 = 5000L;
System.out.println(l == l2);
Run Code Online (Sandbox Code Playgroud)
输出:
真
假
| 归档时间: |
|
| 查看次数: |
51903 次 |
| 最近记录: |