String的intern方法学习笔记

直接放码,一目了然,基于JDK1.7。

package defaultPk;

public class LearnString {
    public static void main(String args[])
    {
        String s1 = "HelloWorld";
        String s2 = new String("HelloWorld");
        String s3 = "Hello";
        String s4 = "World";
        String s5 = "Hello" + "World";
        String s6 = s3 + s4;

        System.out.println(s1 == s2);//s1 创建的 HelloWorld 存在于方法区中的常量池其中的字符串池,而 s2 创建的 HelloWorld 存在于堆中,故第一条 false 。
        System.out.println(s1 == s5);//显然 s5 的创建是用了字符串池中 s1 已经创建好的字面量,故 true 。
        System.out.println(s1 == s6);//其实相当于 s6 = new String(s3 + s4); s6 是存放于堆中的,不是字面量,s3+s4居然生成了堆里面的对象。
        System.out.println(s1 == s6.intern());//搜索常量池中是否有s6的字符串,若有则返回,若没有就创一个再返回。
        System.out.println(s2 == s2.intern());//同理,一个是堆中对象,一个是常量池中字符串。
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38785199/article/details/82948991