Java 值相同的String使用“==“关系运算符结果为false
原因:
在Java中,value值相同的两个使用new创建的字符串使用"=="关系运算符结果为false。
public static void main(String[] args) {
String s1 = new String("CSDN");
String s2 = new String("CSDN");
if(s1 == s2) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
以上代码运行结果为false;
public static void main(String[] args) {
String s1 = "CSDN";
String s2 = "CSDN";
if(s1 == s2) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
以上代码运行结果为true;
Java中用String直接创建的字符串存储在公共池中,而使用new方法创建的字符串存储在堆中。
解决:
使用String.equals()方法比较value值:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public static void main(String[] args) {
String s1 = new String("CSDN");
String s2 = new String("CSDN");
if(s1.equals(s2)) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
以上代码运行结果为true;