黑马程序员技术交流社区
标题:
求教,两者为什么不同
[打印本页]
作者:
李鑫
时间:
2012-5-30 21:02
标题:
求教,两者为什么不同
String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容是“hello”,还是“hello world!”,如果是后者,是不是前者已经存在于内存中了,这样不就造成很大的内存开销吗?那怎样才能解决这个问题?
作者:
张亮
时间:
2012-5-30 21:11
本帖最后由 张亮 于 2012-5-30 21:13 编辑
是后者
用StringBuffer或者StringBuffer这两个类解决,他们的字符串是可变的
String 和StringBuffer,StringBuilder的区别
String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
StringBuffer 与StringBuilder
从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
作者:
杨天皓
时间:
2012-5-30 21:31
最后s 里面是Hello world ,这里要注意的是,String最大的特点是一旦初始化就不可以被改变
并不是s的值改变了,而是又在内存中开辟地址,指向这个对象"world".
楼主如果要对字符串做操作的话,就可以用到StringBuffer和StringBuilder
它们是一个容器,而且长度是可以变化的。可以直接操作多个数据类型。最终都会通过toString方法变成字符串
作者:
黑马-王言龙
时间:
2012-5-30 21:34
本帖最后由 wyl530274554 于 2012-5-30 22:52 编辑
[attach]3072[/attach]更正:
最初的"Hello",由于s重新指向,所以在内存中消失。
String类示例图:
用StringBuffer类的append方法即可增加字符串;
public class TestStringBuffer {
public static void main(String[] args){
StringBuffer s1 = new StringBuffer("Hello");
StringBuffer s2 = s1.append(" world!");
System.out.println(s2);
}
}
复制代码
String.png
(63.87 KB, 下载次数: 37)
下载附件
2012-5-30 22:52 上传
作者:
程序猿
时间:
2012-5-30 22:32
是后者,String对象从创建开始就不会改变,一定会另开辟空间,一般使用StringBuilder来代替.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2