Java字符串拆分方法错误?

时间:2013-09-18 19:53:47

标签: java split

为什么(("+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?

那么为什么世界上的“+”不等于“+”?!

2 个答案:

答案 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对象中的字符。