黑马程序员技术交流社区

标题: java.lang.String类的问题 [打印本页]

作者: 刘晓康    时间: 2012-4-5 20:18
标题: java.lang.String类的问题
JDK文档中说,String变量的内容是不可改的,那么为什么我们可以写出以下的语句?

String str="ab";
str+="cd"; //这里难道不是修改了str变量的内容吗?
System.out.println(str);//输出:abcd
作者: 秦岩    时间: 2012-4-5 20:22
str += "cd"; 不是改变了String变量的内容 而是 把两个字符串加在一起。。  字符串是可以相加的 比如:System.out.println("ab" + "cd");输出的结果就是 "abcd"。


作者: 宋蕈    时间: 2012-4-5 20:25
String 长度不可变
StringBuffer长度可变
String相加 原来的不变
可变不可变的意思是说
你新建一个String型的   你第一次使用呢  他就给你分配那么长的内存堆栈  不可变长度的
你要给他重新赋值了呢   他是重新开辟了一块内存空间指针指向他
原来的内存空间  会被gc() 垃圾回收掉  这样消耗系统内存

作者: 江远云    时间: 2012-4-5 20:30
String str="ab";             //str变量引用指向ab
str+="cd"; //这里难道不是修改了str变量的内容吗?   //  str变量引用指向abcd ,ab的值并没有改变,只是str的引用指向了另外的字符串。              
System.out.println(str);//输出:abcd   
作者: 武庆东    时间: 2012-4-5 20:32
String内容不可以更改,一个String对象内容的改变实际上是通过内存地址的“断开-连接”完成的,而本身没有任何变化!
String str="ab";//假定此时存放“ab”地址为A
str+="cd";//此时存放的地址发生改变,内容变为“abcd”,地址为B
对象是str,没有改变!改变的是str指向的内容!
这里讲到数据在内存的保存形式:
1、栈内存空间:保存对象的名称;
2、堆内存空间:保存对象的属性;
作者: 陈扬    时间: 2012-4-5 21:58
在JDK文档中有:Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。
字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。

作者: niceBoy    时间: 2012-4-5 22:17
str+="cd";并不是在ab字符串后加上cd,而是让str名称引用自新的abcd字符串对象。
在java中,使用+串联字符串会产生一个新的字符串





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