Java字符串缓冲池分析(2)

输出结果:s1 == s2
                 s1 equals s2
分析:先来说说intern()这个方法的作用吧,这个方法的作用是返回在字符串缓冲池中的对象的引用,所以s2指向的也是字符串缓冲池中的地址,和s1是相等的。

public static void main(String[] args) { String Monday = "Monday"; String Mon = "Mon"; String day = "day"; System.out.println(Monday == "Mon" + "day"); System.out.println(Monday == "Mon" + day); }

输出结果:true
                 false
分析:第一个为什么等于true我们已经说过了,因为两者都是常量所以在编译阶段就已经能确定了,在第二个中,day是一个变量,所以不能提前确定他的值,所以两者不相等,从这个例子我们可以看出,只有+连接的两边都是字符串常量时,引用才会指向字符串缓冲池,都则都是指向内存中的其他地址。

public static void main(String[] args) { String Monday = "Monday"; String Mon = "Mon"; final String day = "day"; System.out.println(Monday == "Mon" + "day"); System.out.println(Monday == "Mon" + day); }

输出结果:true
                 true
分析:加上final后day也变成了常量,所以第二句的引用也是指向的字符串缓冲池。

附录
java源码中对于String a = new String(”abc”);这种构造方法的实现

public String(String original) { this.value = original.value; this.hash = original.hash; } 

本文永久更新链接地址

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/980149049da9b8767d0520e748ededf9.html