Java中安按值调用和引用调用问题
按值调用和引用调用
Java中只有按值调用,没有引用调用
示例:
class Operation {
int data = 50;
void change(int data) {
data = data + 100;
}
public static void main(String args[]) {
Operation op = new Operation();
System.out.println("before change " + op.data);
op.change(500);
System.out.println("after change " + op.data);
}
}
示例结果
before change 50
after change 50
另外一个比较容易混淆的示例
class Operation2 {
int data = 50;
void change(Operation2 op) {
op.data = op.data + 100;
}
public static void main(String args[]) {
Operation2 op = new Operation2();
System.out.println("before change " + op.data);
op.change(op);
System.out.println("after change " + op.data);
}
}
数据结果
before change 50
after change 150
貌似通过change是按照应用调用的;实际上依然是按值调用;
第一个案例中的change()方法;
void change(int data) {
data = data + 100;
}
//实际上 this.data = data,传进来的data已经不是原来的data了,所以这里data+100,只是This.data + 100,原来的值不变;
而第二个示例
void change(Operation2 op) {
op.data = op.data + 100;
}
传入的是对象op,同样this.op = op;但是op中,data都是同一个;
两个对象同时引用data,所以当this.data 改变时,op的data也改变,虽然看着像引用调用,但是实际上还是按值调用。