java 代码
- //String类在创建对象时,若是new一个对象,则会创建两个对象,
- //一个在pool中,另一个在堆内存中;如果pool中先前有这个对象了,String类只创建一个对象;
- //如果是直接写一个String类对象,它将会只在对内存中创建一个对象;
- //String中intern方法是返回pool中的对象,也可以说是所占pool的内存地址;
- class TestString
- {
- public static void main(String[] args)
- {
- String str = new String("abc");
- String str1 = "abc";
- String str2 = new String("abc");
- System.out.println(str == str1);//false
- System.out.println(str == str2);//false
- System.out.println(str1 == str2);//false
- System.out.println(str == str.intern());//false
- System.out.println(str1 == str1.intern());//true
- System.out.println(str == str2.intern());//false
- System.out.println(str.intern() == str2.intern());//true
- String s1 = "hello";
- String s2 = "hel";
- String s3 = "lo";
- System.out.println(s1 == s2 + s3);//falue
- System.out.println(s1 == s2 + "lo");//falue
- //s2+"lo"是在堆内存中重新生成一个对象;
- System.out.println(s1 == "hel" + "lo");//true
- //加号两边若是字面值(就是"hel"),s1就和它们相等;
- //"hel" + "lo"它首先去看看pool中有没有它们合起来的对象(hello),若有就直接和s1比较;
- //若没有就生成一个;
- }
- }