黑马程序员技术交流社区

标题: String 问题? [打印本页]

作者: 黄湘怡    时间: 2011-11-12 23:19
标题: String 问题?
字符串最大的特点是:一旦被初始化就不可以改变。
  1. String a = "abc";
  2.                 a = a + "abc";
  3.                 System.out.println("a ="+a);
复制代码
输出的结果是abcabc,那不是被改变了么?
作者: 李印东老师    时间: 2011-11-12 23:25
abc还在,又新建了一个abcabc,只是a的指向变了。。睡了,{:soso_e125:}
作者: 黄湘怡    时间: 2011-11-12 23:33
那怎么证明String一初始化就不可以改变呢?晕中~!
作者: 张志东    时间: 2011-11-13 00:55
这里的可变和不可变是相对的来说的,你感觉的变化其实就是 a 重新指向了一个新的字符串地址:也即是a + “abc” ,但是原来的 “abc”还在内存中,是无法改变的
api中这么说的String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
理解这个东西要明确的知道你  String 出来的 a 其实不是一个真正的 字符串,而是一个指向字符串的引用,也就是内存中的地址值。
越是简单的问题解释起来越费劲儿。
作者: bruinchen    时间: 2011-11-13 03:28
推荐看看这贴http://bbs.itheima.com/thread-3496-1-1.html
作者: 史晓霞    时间: 2011-11-13 07:46
意思是字符串"abc"的值在内存中的值是不变的,"abc"相当于一组常量
作者: 陈超    时间: 2011-11-13 09:11
证明String一初始化就不可以改变:
        你可以定义两个变量同时指向同一个字符串常量:如:a="";b=a;
        然后改变其中一个,再同时输出两个变量,看两个变量是否相同
作者: 黄湘怡    时间: 2011-11-13 13:50
恩,谢谢大家~!{:soso_e100:}




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