楼上的,先为你默哀吧。------------------------pass by value就是传一个值给调用方法,然后方法制作这个值的一个副本(如果是对象的话),所有操作均对这个副本进行。pass by reference就是传递一个引用给调用方法,然后方法直接操作这个引用所指向的地址,换句话说,就是操作这个引用指向的对象。在传递过程和操作过程中,没有副本产生。这样的话就可以直接对该对象操作而不必像pass by value那样,还得把操作之后的副本对象返回给调用者。一般说来,Java除开基本类型是按值传递外,其它都是按引用传递。要是你学了C++,你才头大哦。要考虑很多情况。
引用传递是将这个值的在内存中的地址传了过去。不会加大开销,但是任何修改都是建立在对原值的修改上的。
你看的什么书?
thinking in java看了吗?难道上面写得很乱吗?
上面写的很清楚。如果你没有看,或者没有此书,你可以到网上下载看一下.
随便到什么网站上都有这本书
传值:
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
所以,当你需要从一个函数返回多个值的时候,按址传递可以完成任务;但也需要注意上面例子提到的,数据的一致性能不能保证,你可以思考一下怎么返回数组比较好。
第二遍,重新思索不明白的地方,加深理解(估计要等两个月后,将来进行ing……)
第三遍,整理思路(由于我是初学编程,不知道这要等到什么时候)以上是我学java的思路,高手不要拿鸡蛋砸我