黑马程序员技术交流社区
标题:
简单问题 如何理解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