为什么以下'if()'语句评估为true?
operand1 = "0";
operand1 = Integer.toBinaryString(Long.valueOf(operand1, 10).intValue());
if(operand1 != "0") {
display_secondary.setText(operand1.toUpperCase(Locale.ENGLISH));
}
上面的'if'语句被评估为true,并且运行里面的代码。为什么会这样?
以下代码的评估结果为false(如预期的那样)。
operand1 = Integer.toBinaryString(Long.valueOf(operand1, 10).intValue());
operand1 = "0";
if(operand1 != "0") {
display_secondary.setText(operand1.toUpperCase(Locale.ENGLISH));
}
答案 0 :(得分:3)
比较Java使用中的String
:
if(!operand1.equals("0")){
}
在您这样做的过程中,您正在比较对象地址而不是String
内容。
答案 1 :(得分:2)
在Java中,String
是不可变的,它允许语言进行批量的优化。其中一个称为intern
:它将某些String
放入共享池中,以避免相同的副本浪费空间。
常量String
始终为intern
,因此请使用==
和!=
运算符(检查两个变量是否与相同的对象) ,而不是它们的对象在相同的常量String
(例如"0"
)上是否“相等”将是多种多样的工作。使用equals
几乎总是首选。
您的Integer.toBinaryString
来电构建了一个全新的String
,其恰好具有与在作业和String
条件中使用的常量if
相同的内容,但是一个不同的对象。
答案 2 :(得分:0)
String s1="hey";
String s2="hey";
String s3=new String("hey");
System.out.println(s1==s2);
System.out.println(s1==s3);
s1,s2它们都指向内存中的相同空间.. 因此s1 == s2和s1.equals(s2)......两者都是真的
s1,s3将指向不同的空格...
因此s1.equals(s3)将为真,但s1 == s3为假