Java Pass通过价值理解

Cac*_*AMF 2 java parameter-passing

我想我明白它是传递给方法的对象/数据成员的副本tricky(),因为只有值才是重要的,而不是实际的对象本身.但是打印语句向我保证,arg1并且arg2副本确实在方法中切换.我不明白为什么这不会将信息传回原始对象,从而切换它们; 看作该方法能够成功访问方法中的arg1.xarg1.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)

Las*_*007 5

复制对象引用,复制的引用仍指向内存中的同一对象.这就是您可以使用复制的引用更改对象的原因.但是,修改参数引用会修改副本,而不是原始引用.这就是为什么重定向方法中的引用不会重定向传入的引用.

希望这可以解决问题.