黑马程序员技术交流社区

标题: 字符串一旦初始化就不能改变? [打印本页]

作者: Mylan    时间: 2014-8-11 15:03
标题: 字符串一旦初始化就不能改变?
本帖最后由 Mylan 于 2014-8-11 22:04 编辑

字符串一旦初始化就不能改变,这不是改变了吗

  1. public class Demo1 {
  2.         public static void main(String[] args) {
  3.                 String s="abc";
  4.                 System.out.println(s);
  5.                 s="kk";
  6.                 System.out.println(s);
  7.         }
  8. }
复制代码
运行结果
  1. abc
  2. kk
复制代码





作者: fantacyleo    时间: 2014-8-11 15:05
不可变的意思是对象不可变,不是说引用对象的变量不可变。你改变的只不过是变量s的值(地址),而没有改变字符串对象"abc"的值
作者: liwugang    时间: 2014-8-11 15:10
你这不叫改变,只是改变了引用地址
作者: 天邃任我桓    时间: 2014-8-11 15:31
我觉得可以这么理解,s就是定义系统的一个存储块,abc,kk就是存储在数据块里面的数据,存数的数据可以发生变化,但已经定义了的存储块无法改变,除非你释放他,不知道这么说可以不:lol
作者: 嘿~~    时间: 2014-8-11 16:10
字符串的引用不能改变,但是指向可以变化
作者: tiandzwx    时间: 2014-8-11 16:13
s代表的是"abc"的地址值,你把s改成了"kk"的地址值,但是“abc”还是在内存中没有变过!
作者: 舍我其谁    时间: 2014-8-11 16:18
同意楼上的,你这是改的s的引用地址
作者: cyc523633157    时间: 2014-8-11 16:19
改变引用地址,值不变。
作者: lspooooo    时间: 2014-8-11 17:27
不是s不可改变,是“abc”不可改变
作者: 张涛的狂怒    时间: 2014-8-11 17:34
public class Demo1 {
        public static void main(String[] args) {
                String s="abc";//在栈内存开辟空间s(内存地址)指向字符串池中的abc
                System.out.println(s);
                s="kk";//将原来指向abc的连接断掉,使s向kk
                System.out.println(s);
        }
}
作者: 酋长第一    时间: 2014-8-11 20:56
不变的是地址的指向
作者: 酋长第一    时间: 2014-8-11 21:00
形式参数:
基本类型:形式参数的改变对实际参数没有影响。
引用类型:形式参数的改变对实际参数有影响。
字符串是一种特殊的引用类型。可以把它当作基本类型的值来看。
作者: paozhuanyinyu    时间: 2014-8-11 21:51
没有改变“abc”的值




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