黑马程序员技术交流社区

标题: String Pool的应用 [打印本页]

作者: 海中的游弋草    时间: 2011-12-20 13:30
标题: String Pool的应用
本帖最后由 海中的游弋草 于 2011-12-20 18:09 编辑

public class ObjectTest2
{
        public static void main(String[] args)
        {
                Object object = new Object();
                Object object2 = new Object();

                System.out.println(object == object2);//false

                System.out.println("----------------");


                String str = new String("aaa");
                String str2 = new String("aaa");

                System.out.println(str == str2);//false

                System.out.println("----------------");

                String str3 = "bbb";
                String str4 = "bbb";

                System.out.println(str3 == str4);//true
               
                System.out.println("----------------");

                String str5 = new String("ccc");
                String str6 = "ccc";

                System.out.println(str5 == str6);//false

                System.out.println("----------------");

                String s = "hello";
                String s1 = "hel";
                String s2 = "lo";

                System.out.println(s == s1 + s2);//false            ---这里结果为什么为false
       
                                System.out.println("----------------");

                System.out.println(s == "hel" + "lo");//true   ---这里结果为什么为true   

                    给一个比较详细的解释????

        }
}
作者: 郭繁森    时间: 2011-12-20 13:44
String pool 就是String 池,也就是内存的 Data segment 区,专放静态变量和字符串的区,

比如:

String a="Hello";
那么字符串"Hello"就放在 String pool 中,如果是 String a = new String("Hello"),那么就放在内存的heap(堆)里面

String str1="asd";
String str2="asd";
结果是str1==str2
因为String str1="asd";先会检查String pool中是否有asd这个字符串,若存在不必另外划分区间str2直接引用str1,这样能节省存储的空间
作者: 海中的游弋草    时间: 2011-12-20 15:58
恩 明白!原来string中有一个String 池!  谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2