即使它看起来是正确的功能损坏

问题描述:

我今天一直在测试我的应用程序,并在某种程度上,我完成了一个完全无关的更改后,功能打破了,最重要的是,我不明白为什么它不应该工作。即使它看起来是正确的功能损坏

这就是:

public static int componentStrId(String string) 
    { 
     for(int i = 0; i < GameMain.ComponentNames.length; i++) 
     { 
      Gdx.app.log("GameCoordinator", "componentStrId index: " + i); 
      if(string == GameMain.ComponentNames[i]) 
      { 
       return i; 
      } 
     } 
     return -1; 
    } 

你问之前,是的,我给它的字符串是目前我从搜索数组中,然而该函数返回-1。它只是在阵列中毫无意义地循环。

我已经感觉到Eclipse吓坏了,虽然也许我只是盲目的,看不到一个明显的错误......那么,前者或后者是什么?

取而代之的是...

if(string == GameMain.ComponentNames[i]) 

使用此...

if(string.equals(GameMain.ComponentNames[i])) 
+0

谢谢,在这工作 – Lama

+2

好听。 ==比较确定对象是否是完全相同的实例,而equals则比较它们的值(实际上比较它们的hashcode/equals方法)。这就是为什么(“abc”== new String(“abc”))为false,但(“abc”.equals(new String(“abc”)))为true。 – xagyg

如果您提供

GameMain.ComponentNames[3] 

为参数,将返回3

如果单独构造一个字符串,它总是返回-1,因为==只有在两个引用指向同一个对象时才返回true。

+0

我现在明白了,虽然之前它的工作很有趣! – Lama