String与字符数组

public class Example {
    static String str = new String("good");
    static char[] ch = {'a','b','c'};

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Example ex = new Example();
        ex.change(str, ch);
        System.out.print(str + "and");
        System.out.print(ch);
        

    }
    
    public static void change(String str,char ch[]){
        str = "test ok";
        ch[0] = 'g';
    }

}

输出结果为goodandgbc

首先说下String确实是个不可变对象,这个不可变是JDK特有的,写JAVA的人特意针对的
但是这与本题无关,题目中的形参str只是原引用ex.str的一个引用副本,传的是一个副本地址值,这个值与ex.str地址值是不一样的,但是它们同时指向了堆中的对象new String("good"),当你在函数中改变形参也就是地址的副本值也就是这句str="test ok"只是将副本地址指向常量"test ok",并没有改变原ex.str的指向方向,它还是指向对象new String("good")的。
char数组与String一样传的也是地址的副本,但是关键是形参ch它没有新的指向 ch[0]只是ch在指向原对象时改变了对象的内部结构, 所以在ex.ch指向与它是同一个对象的情况下当然也会随之变化。
posted @ 2017-06-08 14:46  alittlecomputer  阅读(436)  评论(0编辑  收藏  举报