程序员社区

String面试题

public class Test {
    public static void main(String[] args) {
        String s = new String("1");
        s.intern();//调用此方法之前,字符串常量池中就有“1”
        String s1 ="1";
        System.out.println(s == s1);  //jdk6:false  jdk7/8:false

        String s2 =new String("1")+new String("2");
        s2.intern(); //调用该方法之前,字符串常量池中没有"12".使用该方法就强制在字符串常量池中生成"12"
     //因为上面的拼接最后在堆中new String("12").生成这个对象的字符串常量对象时,生成的方式随着版本的不同有所改变
     //jdk6是真实的在字符串常量池中创建一个对象"12"。jdk7之后就是引用堆中的new String("12")的地址
     //造成这个原因也是因为字符串常量池在jdk7之后从方法区放到堆空间中的原因
        String s3 = "12";
        System.out.println(s2 == s3);//jdk6:false  jdk7/8:true
        
    }
}

 

赞(0) 打赏
未经允许不得转载:IDEA激活码 » String面试题

一个分享Java & Python知识的社区