Java Long数据类型比较

为什么下面的代码即使 ,即使它是文字。 *

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);

输出:

以上是 Java Long数据类型比较 的全部内容, 来源链接: utcz.com/qa/429429.html

回到顶部