A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mylan 中级黑马   /  2014-8-11 15:03  /  2462 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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
复制代码




评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

12 个回复

倒序浏览
不可变的意思是对象不可变,不是说引用对象的变量不可变。你改变的只不过是变量s的值(地址),而没有改变字符串对象"abc"的值
回复 使用道具 举报
你这不叫改变,只是改变了引用地址
回复 使用道具 举报
我觉得可以这么理解,s就是定义系统的一个存储块,abc,kk就是存储在数据块里面的数据,存数的数据可以发生变化,但已经定义了的存储块无法改变,除非你释放他,不知道这么说可以不:lol
回复 使用道具 举报
字符串的引用不能改变,但是指向可以变化
回复 使用道具 举报
s代表的是"abc"的地址值,你把s改成了"kk"的地址值,但是“abc”还是在内存中没有变过!
回复 使用道具 举报
同意楼上的,你这是改的s的引用地址
回复 使用道具 举报
改变引用地址,值不变。
回复 使用道具 举报
不是s不可改变,是“abc”不可改变
回复 使用道具 举报
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);
        }
}
回复 使用道具 举报
不变的是地址的指向
回复 使用道具 举报
形式参数:
基本类型:形式参数的改变对实际参数没有影响。
引用类型:形式参数的改变对实际参数有影响。
字符串是一种特殊的引用类型。可以把它当作基本类型的值来看。
回复 使用道具 举报
没有改变“abc”的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马