A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String是不可变的类型,即创建一个String对象后,就不能修改这个String,平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"

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

2 个回复

倒序浏览
平常使用的"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-10 22:52
平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"
我哥啊,你这 ...

{:3_47:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马