我有以下情况。我在 Java 中有一个 HashMap,键为字符串。然后在某个阶段,在运行时我创建与这些键相等的字符串,以便从该映射中检索数据。字符串在“for”循环中创建如下:
String keyToRetrive = "lights[" + Integer.toString(i) + "]" + ".Intensity";
奇怪的是,当我遍历地图以找到等于该字符串的键时,即使找到匹配项,搜索也会跳过。所以在这个搜索循环中:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name == entry.getKey()) { ///name- "lights[0].Intesity"
uniformOut = (ICleanable) entry.getValue();
break;
}
}
即使地图包含一个,名称为“lights[0].Intesity”的键也永远不会返回 true。我如何解决它。我对两个比较的字符串值都使用了 hashCode()。所以这个版本确实有效:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name.hashCode() == entry.getKey().hashCode()) {
uniformOut = (ICleanable) entry.getValue();
break;
}
}
更新:在被指出“==”效果不好并且应该使用“equals()”这一事实之后,我想缩小问题范围:为什么“==”适用于不是由多个创建的字符串串联块?我的意思是,如果我将要比较的关键字符串定义为一个简单的单个字符串:
String foo="foo";
这样的字符串可以使用“==”与 HashMap 键进行比较。
我不是专家 Java 程序员,所以任何人都可以解释为什么它会这样工作吗?