GO_BY_GO_BY_GO 2017-04-19 09:21 采纳率: 50%
浏览 1873
已采纳

刚入门java新手咨询引用数据类型作为实参传递后方法内修改是否会对原数据进行修改

public class StringTest {
public static void main(String[] args) {
String a="aaa";
System.out.println(a);
change(a);
System.out.println("修改后的a:"+a);

}

public static void change(String a) {
    String b="bbb";
    a=b;
    System.out.println("change方法中的a:"+a);
}

}
String为引用数据类型,传递过去的是地址,地址在方法内进行了重新修改,出来后指向不应该是指向了bbb吗?怎么还是aaa?求助图片说明图片

  • 写回答

11条回答 默认 最新

  • hongyu83916 2017-04-19 13:18
    关注

    自己也是初学者,见解不深刻,回答有点武断。不好意思,一起学习,我今天也遇到这个问题。回答之后,感觉自己的结论有问题。
    借你宝地,请高手问答:
    public class QueueTest {
    public static void main(String[] args) {
    String[] a=new String[1];
    a[0]="aaa";
    System.out.println(Arrays.toString(a));
    change(a);
    System.out.println("main中:"+Arrays.toString(a));
    }
    public static void change(String[] a){
    String[] b={"bbb"};
    a[0]=b[0];
    a=b;
    System.out.println("change中:"+Arrays.toString(a));
    }
    }
    //===变了==
    [aaa]
    change中:[bbb]
    main中:[bbb]
    //===============================
    /*public class QueueTest {
    public static void main(String[] args) {
    String[] a=new String[1];
    a[0]="aaa";
    System.out.println(Arrays.toString(a));
    change(a);
    System.out.println("main中:"+Arrays.toString(a));
    }
    public static void change(String[] a){
    String[] b={"bbb"};
    a=b;
    System.out.println("change中:"+Arrays.toString(a));
    }
    }
    //===没变
    [aaa]
    change中:[bbb]
    main中:[aaa]
    */

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?