【发布时间】:2011-10-27 16:18:16
【问题描述】:
可能的重复:
Java String.equals versus ==
whats the difference between ".equals and =="
public String getName() {
return new String("foobar");
}
if(getName() != "foobar2") {
//Never gets executed, it should, wtf!.
}
if(!getName().equals("foobar2")) {
//This works how it should.
}
所以是的,我的问题很简单。为什么!= 的行为与!equals() aka (not Equals) 不同。
我看不出任何一个失败的逻辑原因,在我看来,两者都是完全相同的代码,WTH。
看java运算符 http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
你可以清楚地看到
平等==!=
是相等运算符,当然我通常只在数字上使用!=。但我的思绪开始徘徊,为什么它不适用于String?
编辑: 这看起来更像是实际问题..
for (ClassGen cg : client.getClasses().values()) {
final ConstantPoolGen cp = cg.getConstantPool();
if(cp.lookupInteger(0x11223344) != -1) {
for (Method m : cg.getMethods()) {
System.out.println("lots of class spam");
if(m.getName() != "<init>") continue;
System.out.println("NEVER GETS HERE, 100% SURE IT HAS CONSTRUCTOR LOL");
}
}
}
【问题讨论】:
-
我无法重现此行为:ideone.com/0GhxJ
-
另外,
!=根本与!equals()的代码不同。!=运算符比较reference不等式,而equals()是一个方法。 -
你可能也对这个问题感兴趣:Java String.equals versus ==
标签: java equals equals-operator