java中String比较
本笔记来源于周阳老师大厂面试题,视频地址:https://www.bilibili.com/video/BV15J4112785
public static void main(String[] args) {
String s1="abc";
//添加在堆中
String s2=new String("abc");
String s3="abc";
String s4="xxx";
String s5="abc"+"xxx";
String s6= s3 + s4;
//输出false
System.out.println(s1 == s2);
//输出true
System.out.println(s1==s3);
//输出false
System.out.println(s1 == s5);
//输出false
System.out.println(s1 == s6);
//输出false
System.out.println(s1 == s6.intern());
//输出false
System.out.println(s2 == s2.intern());
}
原理分析:
- s1会被存放在常量池中。s1初始化时,会先在常量池中搜索"abc"字符串是否存在于常量池中,若存在则指向"abc",若不存在,则在常量池中创建。因此,s1==s3会返回true
- intern()方法是先在常量池里面去字符串,若取不到,则在常量池中新建。
- intern()它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true
- intern()的返回值是一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。