public static void main(String[] args) {
String str = "world";
char[] ch = {'H','e','l','l','o'};
change(str,ch);
System.out.print(str+" and ");
System.out.println(ch);
} private static void change(String str, char[] ch) {
str="change";
ch[0]='C';
}
对于上面的代码,哪位大侠能详细的给我说一下str为什么不变,但ch[0]却变了呢??????

解决方案 »

  1.   

    这个问题前几天我好想刚回答过。不知道那个帖子是不是你发的。。
    原因就是change(String str, char[] ch) 
    这个方法里面,str传的是一个值,意思就是你把这个值赋给一个新的对象,这样这个新对象怎么改都不会影响到原对象。。
    但是ch传入的是一个对象,把这个对象的地址值传给一个新的对象,这样的话新对象的变化肯定对原对象造成相应的修改。说白了,这两个对象其实就是一个对象,因为有共同的地址值,只不过名称不同而已。。
      

  2.   


    String 不是一个对象?????
    public static void main(String[] args) {
    String str = "world";
    char[] ch = { 'H', 'e', 'l', 'l', 'o' };
    change(str, ch);
    System.out.print(str + " and ");
    System.out.println(ch);
    } private static void change(String str, char[] ch) {
    str = "change";
    ch = null;
    }
    运行看看。两个传的都是引用,,,额,,其实java里面都是值传递。。据说没有引用传递求辟谣至于这里嘛,,,个人认为str被覆盖了而ch只是里面值被改变,引用的内存地址还是原来的。
      

  3.   

    一楼大侠,你的意思是不是说:如果把ch比作仓库的话,ch就是这个仓库的钥匙,它所指向的堆中的对象就是一个仓库,而str直接是另一个仓库,而不是钥匙。你的意思是这个意思吗???