如以下代码所示,s1 == s2 ?s2 == s3 ?
package interview.day02;
/**
* @author: 邹祥发
* @date: 2022/1/20 20:12
*/
public class StringDemo {
public static void main(String[] args) {
String s1 = new String("xiaozou");
String s2 = "xiaozou";
//s1 == s2?
System.out.println(s1 == s2);
String s3 = s1.intern();
//s2 == s3?
System.out.println(s2 == s3);
}
}
首先能够判断的是,s1与s2是肯定不相等的。
s1中创建了两个对象,1个字符串常量"xiaozou"放在字符串常量池中,1个String对象,放在堆里面。
s2的值来源于字符串常量池,如果字符串常量池中存在"xiaozou",则赋值给s2;
s1是一个String对象,s2是字符串常量对象,故二者是不相等的。
看一下intern()方法源码。
public native String intern();
String对象的intern()方法,首先会检查字符串常量池中是否存在"xiaozou"。
如果存在则返回该字符串引用,如果不存在,则把"xiaozou"添加到字符串常量池中,并返回该字符串常量的引用。
由于字符串常量池中已经存在"xiaozou",故s2与s3是相等的。

评论区 0