黑马程序员技术交流社区

标题: 求解答详细的 [打印本页]

作者: 圣手书生    时间: 2018-4-23 22:02
标题: 求解答详细的
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的数据会被更改  
作者: hmhm123    时间: 2018-4-24 08:35
因为你的str这个变量最后是一个字符串常量;
你的ch,是一个数组,也就是引用数据类型的一个变量;
ch只是存放在栈里的一个变量名,而它的元素都是存放在堆中的;
所以当你的ch字符数组传入到方法中,在方法里修改0角标里的元素,
实际上是通过ch所指向的地址值,去堆里修改元素了,所以最后会发生变化。




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