Java Long数据类型比较
问题内容:
为什么下面的代码即使 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));
}
}
问题答案:
Long
是一个对象,而不是原始对象。通过使用==
您正在比较 参考值 。
您需要做:
if(str.equals(str2))
正如您在第二次比较中所做的那样。
编辑: 我明白了…您正在考虑其他对象的行为就像String
文字。他们不*。即使如此,你永远要使用==
有String
任何文字。
(* Autobox类型确实实现了flyweight模式,但仅适用于-128->
127值。如果将其Long
设为等于,则50
实际上将有两个对同一个flyweight对象的引用。同样, 永远不要使用== 来比较它们。)
编辑添加:
Java语言规范第5.1.7节中专门说明了这一点:
如果装箱的值p为true,false,字节或\ u0000到\
u007f范围内的char或-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);
输出:
真
假