首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-01-28 
java传参到底是传值还是传引用?今天看了一个树结构的实现,StringBuffer无法正确显示 改成String就好了 有

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

热点排行
Bad Request.