-2

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

那么为什么“+”不等于“+”呢?!

4

2 回答 2

3

您不应该将字符串与==. 您应该将它们与之进行比较.equals()

if(a.equals("+"))
{
    // ...
}

这个人解释得很好,所以我不需要再解释了:看看这个对类似问题的回答。

于 2013-09-18T19:54:56.657 回答
0

字符串文字(直接放置在代码中的字符串)存储在字符串池中,如果使用某些字符串文字几次,则使用字符串池中的相同对象。由于==比较引用,它将true返回

String a = "+";
System.out.println(a == "+");

现在作为方法结果的字符串是单独的对象,它们没有放在字符串池中,所以在

String a = (("+k").split("k"))[0];

存储在其中的字符串对象与字符串池a不同"+",这就是==返回 false 的原因。

要摆脱这个问题,您需要使用equals比较存储在 String 对象中的字符的方法。

于 2013-09-18T20:05:31.290 回答