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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 圣手书生 初级黑马   /  2018-4-23 22:02  /  1035 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String str = new String("good");
    char[] ch = {'a','b','c'};
    public static void main(String[] args) {
        Test te = new Test();
        te.change(te.str,te.ch);
        System.out.println(te.str + "and");
        System.out.println(te.ch);
    }
    public static void change(String str, char ch[]){
        str = "test ok";

        ch[0] = 'g';

    }


为什么数组下标0的数据会被更改  

1 个回复

倒序浏览
因为你的str这个变量最后是一个字符串常量;
你的ch,是一个数组,也就是引用数据类型的一个变量;
ch只是存放在栈里的一个变量名,而它的元素都是存放在堆中的;
所以当你的ch字符数组传入到方法中,在方法里修改0角标里的元素,
实际上是通过ch所指向的地址值,去堆里修改元素了,所以最后会发生变化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马