黑马程序员技术交流社区

标题: 简单问题 如何理解String为不可变对象,一旦被创建,就不能修改它的值 [打印本页]

作者: 附耳细说    时间: 2014-6-15 12:41
标题: 简单问题 如何理解String为不可变对象,一旦被创建,就不能修改它的值
String str1 = "abc";
str1 = "bcd";

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

作者: 13556793092    时间: 2014-6-15 13:58
      在SUN公司的API文档中,String类被final修饰,这里你自己可以查看API验证,这就表示String类型在初始化后就不可改变他的值了。
原理:
1.其实在底层当你第一次创建String对象的时候,就会在将它生成存在字符串常量池中。
2.当你再次创建和第一个String对象值相等的对象时,它实际上是把第一次存在字符常量池中的在次拿给你用。
3.这是一种设计模式,叫做享元设计模式。
作者: 附耳细说    时间: 2014-6-15 16:31
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);
从他们的实现方式看出了端倪
作者: BigKarel    时间: 2014-6-15 18:46
直接这样说吧,String定义为字符串常量,常量一被创建就不可更改了,像StringBuffer和StringBuilder这样的是字符串变量是只创建一个对象就可以操作字符串了




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