即使它看起来是正确的功能损坏
问题描述:
我今天一直在测试我的应用程序,并在某种程度上,我完成了一个完全无关的更改后,功能打破了,最重要的是,我不明白为什么它不应该工作。即使它看起来是正确的功能损坏
这就是:
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]))
答
如果您提供
GameMain.ComponentNames[3]
为参数,将返回3
。
如果单独构造一个字符串,它总是返回-1,因为==
只有在两个引用指向同一个对象时才返回true。
+0
我现在明白了,虽然之前它的工作很有趣! – Lama
谢谢,在这工作 – Lama
好听。 ==比较确定对象是否是完全相同的实例,而equals则比较它们的值(实际上比较它们的hashcode/equals方法)。这就是为什么(“abc”== new String(“abc”))为false,但(“abc”.equals(new String(“abc”)))为true。 – xagyg