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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String str1 = "abc";
str1 = "bcd";

String str2 = new String(str1);
str1 = new String("cde");

3 个回复

倒序浏览
      在SUN公司的API文档中,String类被final修饰,这里你自己可以查看API验证,这就表示String类型在初始化后就不可改变他的值了。
原理:
1.其实在底层当你第一次创建String对象的时候,就会在将它生成存在字符串常量池中。
2.当你再次创建和第一个String对象值相等的对象时,它实际上是把第一次存在字符常量池中的在次拿给你用。
3.这是一种设计模式,叫做享元设计模式。
回复 使用道具 举报
13556793092 发表于 2014-6-15 13:58
在SUN公司的API文档中,String类被final修饰,这里你自己可以查看API验证,这就表示String类型在初始 ...

谢谢你的回答  我已经想明白了,马山结贴
        String strTemp = "abc";
        //String为不可变对象,所以修改完它的值后,需要new一个新对象,然后把新的值保存进去
        String str = "";
        str = str.concat(strTemp);
        
        //StringBuffer为可变对象,直接在对象实例上面修改它的值
        StringBuffer sb = new StringBuffer();
        sb.append(strTemp);
从他们的实现方式看出了端倪
回复 使用道具 举报
直接这样说吧,String定义为字符串常量,常量一被创建就不可更改了,像StringBuffer和StringBuilder这样的是字符串变量是只创建一个对象就可以操作字符串了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马