黑马程序员技术交流社区
标题:
String类的一个问题
[打印本页]
作者:
于世德
时间:
2013-7-12 13:02
标题:
String类的一个问题
为什么说String类的内容不可变?String s = new String("aaaa"); s = s.substring(2); 为什么要将堆中的"aaaa"改变为"aa"之后还要创建一个新的对象呢?
作者:
张先庆
时间:
2013-7-16 23:17
jvm会在内存中重新创建一个String对象“aa”,而原来的“aaa”对象依然存在。 而且内存中“aaa”这个内容是不能修改的.
String类有一个 char 数组value,是final的,用来当作存储字符串的容器,也就是说String s=“aaa”;这个字符串真正是这么存储的: value[0]='a'; value[1]='a'; value[2]='a'; 而且value是final的,这就是说value在编译时就已经决定了。因此,这就是我们所说的String是不可变的。
作者:
于世德
时间:
2013-7-17 09:57
张先庆 发表于 2013-7-16 23:17
jvm会在内存中重新创建一个String对象“aa”,而原来的“aaa”对象依然存在。 而且内存中“aaa”这个内容是 ...
哦,就是说String类在堆内存中实际存储的是个char[]类型的数组,而这个数组是final的,所以String类的内容不可改变,明白一些了:lol
作者:
张先庆
时间:
2013-7-18 22:10
怎么没给加分啊。。。。。。。。。。。。。。
作者:
徐鹏跃
时间:
2013-11-21 14:43
看看String的源码啊 是final的 内容不会变 操作String对象 等于又创建了一个新对象 所以在编程中 尽量使用Stringbuider对象 如果是线程安全的 使用StringBuffered对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2