这两个代码有不同的输出,我不知道为什么。这两种初始化方式之间有什么区别字符串
String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));
输出为“真真”
String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));
输出是“假的真”
这两个代码有不同的输出,我不知道为什么。这两种初始化方式之间有什么区别字符串
String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));
输出为“真真”
String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));
输出是“假的真”
当你使用这个
String a="abc";
String b="abc";
java的内存是abc
只创建一个对象,并在这里a和b都指向同一个对象,并==
不检查字符串的内容,而不是它检查的参考值。但只要你做到这一点
String b=new String("abc");
Java的内存是从a
不同,现在B和A都指向两个不同的对象,因此,如果你有equals
功能结果比较的内容将是真正创建一个新对象b
但如果您现在比较参考,结果将是错误的
这必须是大量的问题的重复,但我会发表评论说当你执行以下操作时:
String a = "abc";
String b = "abc";
JVM创建一个单个常量池中包含字符串abc
的字符串对象。因此,a
和b
字符串只是指向池中的相同字符串。
但是,当你做到以下几点:
String a = "abc";
String b = new String("abc");
即使abc
已经存在于池中创建新对象。因此比较a == b
返回false,尽管这两个字符串的内容仍然是等价的。
评论,downvotes?说些什么_。 –
补充说明:在Java中,'=='比较内存位置,'equals()'比较字符串的内容。 – GingerDeadshot
为什么你发布的答案几乎是以前发布的这个问题的答案的重复? –
我正在写这个答案,并且他在我即将完成的时候发布了一个地方,并且存在差异,我提到了什么==做什么以及什么等于。我尊重您的观点,但我认为它值得发布。 –
好的,他们指着同一个对象,但是当我做了这个b =“qwe”;? (我想在这一刻我用qwe创建一个新对象) –