黑马程序员技术交流社区
标题:
字符串
[打印本页]
作者:
庄纪光
时间:
2011-9-28 22:07
标题:
字符串
String s = “Hello”;s = s + “ world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
作者:
匿名
时间:
2011-9-28 22:56
String 是不可变的字符序列,在执行字符串的连接时,会另外开辟一块内存空间,将两个连接的字符串放在新开辟的内存空间中进行连接,构成一个新的字符串,所以,string的内容不会改变。与String 相对应的是 StringBuffer,代表可变的字符序列,当要进行字符串的连接时,会直接在StringBuffer上开辟内存空间,直接将连接的字符串放在新开辟的内存中,构成一个新的字符串。所以,效率会更高,因此,在做字符串的连接时,通常用StringBuffer。
作者:
匿名
时间:
2011-9-28 23:17
准确来说 ,是s 这个引用指向了一个新的对象
也就是"helloworld " 但是hello 这个对象还是在内存里面
你可以用
System.identityHashCode() 这个方法看他们的hashcode 值 ,不一样的
作者:
匿名
时间:
2011-9-28 23:48
必须没有变,论坛上好像有不少同样的帖子了,嘎嘎,看来大家对这个都很关注啊,大概是这样的,原来有一个s,然后s+"XXX",这个并不是说就把原来那个堆空间内容变为"XXXXXX",而是重新建立一个内存空间,所以说是没有变的,
作者:
匿名
时间:
2011-9-29 00:57
因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向了。
作者:
匿名
时间:
2011-9-29 03:21
标题:
string类的问题
String s = “Hello”;s = s + “ world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
答案是没有! 要明白的理解一句话 因为String被设计成不可变的类
如果你看官网文档中string会被标示为final型的
改变的是它对象的应用,只是这个应用不会指向这个字符串,但这个字符串还会在内存中,
学了C语言的 都知道指针的概念!就是位置偏移了而已,但还在!
作者:
匿名
时间:
2011-9-29 07:49
String是常量一旦创建不能修改,Stringbuffer和stringbuilder支持可变的字符串。
Java 语言提供对字符串串联符号("+")是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。
串联后的字符串新开辟了一块空间然后由s指向,原来的String对象应该还在。
你打印两个s的hashCode()会发现是不一样的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2