我有以下代码:为什么DOES ==有时适用于Java中的字符串?
Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);
,输出False
,符合市场预期。这是因为c1
和c2
是引用类型,“==”检查它们是否指向相同类型(它们不这样做)。
不过,我最近尝试这样的:
String a = "hello";
String b = "hello";
System.out.println(a == b);
由于某种原因输出True
。为什么是这样?字符串是参考类型,a
和b
指的是不同的存储位置。我总是被教导,你需要使用.equals()
这个工作,这不是!
UPDATE 这岂不是重复的! 我知道正确的方式来比较字符串使用.eqauls()
更新2 这个问题可能有一个答案:How do I compare strings in Java?,但问题也没有问什么,我问,答案就在更多的去详细比需要。
因此,使用相同的问题进行搜索(在Google或其他平台上)意味着用户不会被发送到该问题,或者可能由于问题的标题而将其完全消除。因此,为了其他用户的利益而保持这一点可能是一个好主意!
我同意OP-这不是这些问题中的任何一个的重复。这是要求_why_引用相等不返回两个完全相同的字符串文字。 – davmac
你会在这里找到答案http://stackoverflow.com/questions/2486191/what-is-the-java-string-pool-and-how-is-s-different-from-new-strings。 – yorlin
是的,这个问题可能在那里有答案,但是那里的问题并没有这么问。因此,用同样的问题搜索,不会发送到那里。因此,为了其他用户的利益,这可能是一个想法。 –