楼上的,先为你默哀吧。------------------------pass by value就是传一个值给调用方法,然后方法制作这个值的一个副本(如果是对象的话),所有操作均对这个副本进行。pass by reference就是传递一个引用给调用方法,然后方法直接操作这个引用所指向的地址,换句话说,就是操作这个引用指向的对象。在传递过程和操作过程中,没有副本产生。这样的话就可以直接对该对象操作而不必像pass by value那样,还得把操作之后的副本对象返回给调用者。一般说来,Java除开基本类型是按值传递外,其它都是按引用传递。要是你学了C++,你才头大哦。要考虑很多情况。

解决方案 »

  1.   

    值传递是将这个所需传递的变值再copy一个副本。主样开销就加大了,并且修改这个副本不会影响原来的值。
    引用传递是将这个值的在内存中的地址传了过去。不会加大开销,但是任何修改都是建立在对原值的修改上的。
      

  2.   

    书上所得太乱。能有个比较详细的说明么
    你看的什么书?
    thinking in java看了吗?难道上面写得很乱吗?
    上面写的很清楚。如果你没有看,或者没有此书,你可以到网上下载看一下.
    随便到什么网站上都有这本书
      

  3.   

    做为初学者,不用对这些本质的东西过于追求,首先要做好的是知道二者的区别在哪里,在写程序的时候采用什么样合理的方式。
    传值:
    public void method1(paramA_status_1){
       paramA_status_2//这里你改动了paramA的状态
    }
    比如你在method2中调用了method1:
    public void method1(){
       paramA//step1,你在这设置了个变量,作为参数传入method1;
       method1(paramA);
       //调用完毕,你的paramA还是step1的状态
    }而由址传递则相反,调用后你在method2中做出的更改在调用后状态发生了改变。java中原始的数据类型,如int,long,double,char等等,都是按值传递(你姑且认为是按值传递),还有字符串String,虽然它是一个对象类型,但也是按值传递(你姑且认为是按值传递),而其他对象,都是按地址传递,这里是一个例子:public class TestTest{
    public static void main(String[] args){
    StrTest st=new StrTest();
    st.print();
    String[] sArray=st.getStr();
    sArray[0]="change";//StrTest中的数组对象也被改变了
    st.print();
    }
    }class StrTest{

    private String[] str={"a","b"};

    public String[] getStr(){
    return str;//注意,你返回的是一个数组对象,按址传递
    }
    public void print(){
    for(int i=0;i<str.length;i++){
    System.out.println(str[i]);
    }
    }

    }输出:a
    b
    change
    b
    所以,当你需要从一个函数返回多个值的时候,按址传递可以完成任务;但也需要注意上面例子提到的,数据的一致性能不能保证,你可以思考一下怎么返回数组比较好。
      

  4.   

    呵呵,我也是初学者,对书中所说有的地方也很不明白但是正在努力中。学习方法比较笨:看第一遍,仅仅照例题做,有不明白的地方多思考,实在想不明白就提问,还是不明白就放下不管(正在进行ing……)
    第二遍,重新思索不明白的地方,加深理解(估计要等两个月后,将来进行ing……)
    第三遍,整理思路(由于我是初学编程,不知道这要等到什么时候)以上是我学java的思路,高手不要拿鸡蛋砸我
      

  5.   

    jxspace(彼黍离离)应得80%的点数!