为什么(("+k").split("k"))[0]
不等于"+"
?我很困惑。
程序:
//The Control Test
String a = "+";
System.out.println(a);
System.out.println((byte) a.charAt(0));
System.out.println(a == "+");
//The Error
a = (("+k").split("k"))[0];
System.out.println(a);
System.out.println((byte) a.charAt(0));
System.out.println(a == "+");
输出:
+
43
true
+
43
false -- Why?
那么为什么世界上的“+”不等于“+”?!
答案 0 :(得分:3)
您不应将字符串与==
进行比较。您应该将它们与.equals()
进行比较。
if(a.equals("+"))
{
// ...
}
这个人解释得非常好,所以我没有必要再解释一下:看this answer类似的问题。
答案 1 :(得分:0)
字符串文字(直接放在代码中的字符串)存储在字符串池中,如果使用某些字符串文字,则几次使用字符串池中的相同对象。由于==
会比较引用,因此
true
String a = "+";
System.out.println(a == "+");
现在作为方法结果的字符串是单独的对象,这些对象没有放在String池中,所以在
中String a = (("+k").split("k"))[0];
存储在a
中的字符串对象与字符串池中的"+"
不同,这就是==
返回false的原因。
要解决此问题,您需要使用equals
方法来比较存储在String对象中的字符。