(“kg”==“kg”)返回false。我怎么告诉java,这个比较返回true?

时间:2011-09-15 11:47:33

标签: java android

  

可能重复:
  Java string comparison?

我试图这样做:

boolean exit = false;
while(exit==false && convStoreIndex<convStoreLength) {
  if(conversionStore[convStoreIndex].getInUnit()==inUnit) {
    indexCount++;
    exit=true;
  }
  convStoreIndex++;
}

但if-condition永远不会成功,即使两个字符串相同(在调试器中检查过)。 所以我添加了一些内容:

boolean exit = false;
while(exit==false && convStoreIndex<convStoreLength) {
  Log.v("conversionStore["+String.valueOf(convStoreIndex)+"]", conversionStore[convStoreIndex].getInUnit()+"|"+inUnit);
  String cs = conversionStore[convStoreIndex].getInUnit();
  String iu = inUnit;
  Log.v("cs", cs);
  Log.v("iu", iu);
  Log.v("Ergebnis(cs==iu)", String.valueOf(cs==iu));
  if(conversionStore[convStoreIndex].getInUnit()==inUnit) {
    indexCount++;
    exit=true;
  }
  convStoreIndex++;
}

以下是LogCat的摘录:

09-15 11:07:14.525: VERBOSE/cs(585): kg
09-15 11:07:16.148: VERBOSE/iu(585): kg
09-15 11:07:17.687: VERBOSE/Ergebnis(cs==iu)(585): false

转换商店的类:

class ConversionStore {
  private String inUnit;
  [...]
  public String getInUnit() {
    return inUnit;
  }
}

谁会变得疯狂,java还是我?

6 个答案:

答案 0 :(得分:13)

请勿使用==来比较String个对象,请使用.equals()

if(conversionStore[convStoreIndex].getInUnit().equals(inUnit)) {

答案 1 :(得分:6)

  

要比较字符串是否相等,请不要使用==。 ==运算符检查   查看两个对象是否完全相同。两个字符串可能是   不同的对象,但具有相同的值(完全相同   其中的人物)。使用.equals()方法比较字符串   平等。

直接搜索“Java字符串比较”时Google提供的第一个链接...

答案 2 :(得分:4)

请使用String.equals()按字符串内容而非参考标识进行比较。

答案 3 :(得分:3)

您正在使用Strings ==cs==iu进行比较。

但只有当两个true实际上是同一个对象时,才会返回String。这不是这种情况:您有两个不同的String实例,它们包含相同的值。

您应该使用String.compareTo(String)

答案 4 :(得分:3)

使用.equals();

==方法实例

Becase ::

他们的意义非常不同。 equals()方法存在于java.lang.Object类中,期望检查对象状态的等价性!这意味着,对象的内容。期望'=='运算符检查实际对象实例是否相同。

例如,假设您有两个String对象,它们由两个不同的引用变量s1和s2指向。

 s1 = new String("abc");
 s2 = new String("abc");

现在,如果您使用“equals()”方法检查它们的等效性为

if(s1.equals(s2))
  System.out.println("s1.equals(s2) is TRUE");
else
  System.out.println("s1.equals(s2) is FALSE");

您将获得输出为TRUE,因为'equals()'方法检查内容是否等同。

让我们检查'=='运算符..

if(s1==s2)
 System.out.printlln("s1==s2 is TRUE");

否则      System.out.println(“s1 == s2为FALSE”);

现在你将得到FALSE作为输出,因为s1和s2都指向两个不同的对象,即使它们都共享相同的字符串内容。这是因为每次创建新对象时都会出现'new String()'。

尝试运行没有'new String'的程序,只需运行

String s1 = "abc";
String s2 = "abc";  

两个测试都会得到TRUE。

<强>立信::

After the execution of String str1 = “Hello World!”; the JVM adds the string “Hello World!” to the string pool and on next line of the code, it encounters String str2 =”Hello World!”; in this case the JVM already knows that this string is already there in pool, so it does not create a new string. So both str1 and str2 points to the same string means they have same references. However, str3 is created at runtime so it refers to different string.

答案 5 :(得分:2)

两件事: 您不需要编写“boolean == false”,您只需编写“!boolean”,因此在您的示例中将是:

while(!exit && convStoreIndex<convStoreLength) { 

第二件事: 比较两个字符串使用String.equals(String x)方法,因此它将是:

if(conversionStore[convStoreIndex].getInUnit().equals(inUnit)) {