简介
字符串常量池 & 堆内存中你是不是傻傻分不清楚
intern 方法你是不是傻傻分不清楚
简单来说, 存在一个如果字符串常量值中已经有了对象, 就
code
intern : 如果没有在字符串常量池中创建, 就会创建出一个
public static void main(String[] args) {
String a1 = "1";
String b1 = "1";
System.out.println(a1 == b1); // 预测值: true
String a2 = new String("2");
String b2 = new String("2");
System.out.println(a2 == b2); // 预测值: false
String a3 = new String("3");
a3.intern();
String b3 = "3";
System.out.println(a3 == b3); // 预测值: false
String a4 = new String("4");
a4 = a4.intern();
String b4 = "4";
System.out.println(a4 == b4); // 预测值: true
String a5 = "5";
String b5 = new String("5");
System.out.println(a5 == b5); // 预测值: false
String a6 = new String("1") + new String("2");
a6.intern(); // 当字符串常量池中没有这个对象的时候, a6会重新指向字符串常量池中
String b6 = "12";
// 当把 a6.intern(); 放在这里下面是false, 因为如果字符串常量池中已经有这个地址暂时不会更改a6地址
System.out.println(a6 == b6); // 预测值: true
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》