如何测试字符串值的相等性?

时间:2013-09-09 02:18:45

标签: java android

为什么以下'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));
}

3 个答案:

答案 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为假