黑马程序员技术交流社区

标题: 谈谈我对String和StringBuffer的理解 [打印本页]

作者: 会说话的木头    时间: 2014-6-10 17:17
标题: 谈谈我对String和StringBuffer的理解
String是不可变的类型,即创建一个String对象后,就不能修改这个String,平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"

StringBuffer是相对于String的一个可变的类型,StringBuffer可以在原对象上进行加长或缩短等修改操作。适用于需要大量连接字串或拼接处理字串的情况,相应的情况下就不宜使用String对象了。

作者: 谭荣强    时间: 2014-6-10 22:52
平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"
我哥啊,你这理解可大错了。“aa”+"ab"+"av"..................只创建立一个对象。
“aa”表示常量,编译时就已确定,存于常量池中
new String{"aa"};运行时创建对象,存入堆栈。
”aa“+"bb":表示一个常量,存于常量池,
s=new String("bb")
“aa”+s;会创建一个新对象,存于堆中。
你先看看下面的练习把,看看区别在哪。自己理解吧
        String s="a";
                String s1 ="a";
                String s7 ="b";
                String s2 = "b"+s;
                String s8 = s+"b";
                String s3 = new String("ab");//new 新建了一个对象,s3在内存中有两个对象,面试
                String s4 = new String("ab");
                String s5 = new String("a");
                String s6 ="ab";
                System.out.println(s2.hashCode()+"...."+s6.hashCode()+".."+s8.hashCode());
                System.out.println(s==s1);//ture,
                System.out.println(s==s5);//flase
                System.out.println(s2==s3);//有new
                System.out.println(s3==s4);//flase,有new
                System.out.println(s2==s6);//
                System.out.println(s8==s6);flase
        //s 和s1相等的原因,s存于常量池中,s1直接引用。                
        new String()创建的字符串不放入常量池中,他们有自己的地址空间。

作者: 会说话的木头    时间: 2014-6-11 10:32
谭荣强 发表于 2014-6-10 22:52
平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"
我哥啊,你这 ...

{:3_47:}




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