每日一题(2022/1/20)

  Java   2分钟   700浏览   0评论

如以下代码所示,s1 == s2s2 == 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 条评论