可能重复:
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还是我?
答案 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)) {