当前位置: 代码迷 >> J2SE >> java传参到底是传值还是传引用?该如何解决
  详细解决方案

java传参到底是传值还是传引用?该如何解决

热度:204   发布时间:2016-04-24 12:34:52.0
java传参到底是传值还是传引用?
今天看了一个树结构的实现,StringBuffer无法正确显示 改成String就好了 有点疑问就写了下面的test
Java code
public class Test {    public static void main(String []args){        int s = 123;        String m = "123";        Ani a = new Ani();        a.change(s);        System.out.println(s);        a.change(m);        System.out.println(m);        StringBuffer t= new StringBuffer("123");        a.change(t);        System.out.println(t);        StringBuffer t2= new StringBuffer("123");        a.change2(t2);        System.out.println(t2);    }}class Ani{    public void change(int s){        s=123456;    }    public void change(String m){        m+="456";    }    public void change(StringBuffer t){        t.append("456");    }    public void change2(StringBuffer t2){        t2 = new StringBuffer("000");    }}

结果是:
Java code
123123123456123


int,String 都没有因为调用方法而改变,觉得是传值。
StringBuffer t调用change改变,觉得应该是传引用。。
StringBuffer t2调用change2赋予参数新的引用,但是打印出来却没有变。
求高手解答Java到底是传值还是传引用?


------解决方案--------------------
1、 如果参数是基本数据类型(int、long等),传值。方法内部改变参数值,外部值不变。

2、 如果参数是对象类型,传地址。方法内部改变对象值,外部对象值改变。但是,如果方法内部调用new重新构建参数对象,外部对象仍然记录构造前的对象值。


------解决方案--------------------
感谢,String应该也不是基本类型,为什么change()后原值未改变?
回答 :String 不是基本类型 ,一般的String 都在常量池 中的
------解决方案--------------------
探讨

1、 如果参数是基本数据类型(int、long等),传值。方法内部改变参数值,外部值不变。

2、 如果参数是对象类型,传地址。方法内部改变对象值,外部对象值改变。但是,如果方法内部调用new重新构建参数对象,外部对象仍然记录构造前的对象值。

------解决方案--------------------
看完这个博客,楼主应该明白了
http://blog.csdn.net/niuniu20008/article/details/2953785
  相关解决方案