Cac*_*AMF 2 java parameter-passing
我想我明白它是传递给方法的对象/数据成员的副本tricky(),因为只有值才是重要的,而不是实际的对象本身.但是打印语句向我保证,arg1并且arg2副本确实在方法中切换.我不明白为什么这不会将信息传回原始对象,从而切换它们; 看作该方法能够成功访问方法中的arg1.x和arg1.y成员.
// This class demonstrates the way Java passes arguments by first copying an existing
// object/data member. This is called passing by value. the copy then points(refers)
// to the real object
// get the point class from abstract window toolkit
import java.awt.*;
public class passByValue {
static void tricky(Point arg1, Point arg2){
arg1.x = 100;
arg1.y = 100;
System.out.println("Arg1: " + arg1.x + arg1.y);
System.out.println("Arg2: " + arg2.x + arg2.y);
Point temp = arg1;
arg1 = arg2;
arg2 = temp;
System.out.println("Arg1: " + arg1.x + arg1.y);
System.out.println("Arg2: " + arg2.x + arg2.y);
}
public static void main(String [] args){
Point pnt1 = new Point(0,0);
Point pnt2 = new Point(0,0);
System.out.println("X1: " + pnt1.x + " Y1: " +pnt1.y);
System.out.println("X2: " + pnt2.x + " Y2: " +pnt2.y);
System.out.println(" ");
tricky(pnt1,pnt2);
System.out.println("X1: " + pnt1.x + " Y1:" + pnt1.y);
System.out.println("X2: " + pnt2.x + " Y2: " +pnt2.y);
}
}
Run Code Online (Sandbox Code Playgroud)
复制对象引用,复制的引用仍指向内存中的同一对象.这就是您可以使用复制的引用更改对象的原因.但是,修改参数引用会修改副本,而不是原始引用.这就是为什么重定向方法中的引用不会重定向传入的引用.
希望这可以解决问题.
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |