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);
输出:
真
假



