愤怒中的小草

博客园 首页 新随笔 联系 订阅 管理
public class InternDemo {
    public static void main(String[] args){
        /*
        jdk7版本之后 字符串常量池从Perm Space移到Java Heap
         */
        //生成两个对象
        String s1 = new String("aaa");
        //直接使用双引号声明出来的String对象会直接存储在常量池
        String s2 = "aaa";
        //非双引号声明的string对象,可以使用intern方法,若字符串存在,使用查询的字符串,若不存在将当前字符串放入常量池
        s1.intern();
        //比较堆内存地址
        System.out.println(s1.equals(s2));
        //比较引用地址
        System.out.println(s1 == s2);
        //equals相等,hashcode一定相等
        System.out.println(s1.hashCode() == s2.hashCode());

        //生成两个对象
        String s3 = new String("1") + new String("1");
        String s4 = "11";
        s3.intern();
        System.out.println(s3.equals(s4));
        System.out.println(s3 == s4);
        System.out.println(s3.hashCode() == s4.hashCode());
        /*
        true
        false
        true
         */
    }
}

 

posted on 2019-03-20 09:53  愤怒中的小草  阅读(208)  评论(0编辑  收藏  举报