Như em được biết thì với kiểu dữ liệu tham chiếu thực ra là truyền bản sao của tham chiếu gốc, chứ
không phải truyền tham chiếu gốc hoặc truyền đối tượng (pass the references by value, not the original
reference or the object). Nhưng em vẫn không hiểu đầu ra của phương thức này?
public void tricky(Point arg1, Point arg2)
{
arg1.x = 100;
arg1.y = 100;
Point temp = arg1;
arg1 = arg2;
arg2 = temp;
}
public static void main(String [] args)
{
Point pnt1 = new Point(0,0);
Point pnt2 = new Point(0,0);
System.out.println("X: " + pnt1.x + " Y: " +pnt1.y);
System.out.println(“X: " + pnt2.x + " Y: " +pnt2.y);
System.out.println(” ");
tricky(pnt1,pnt2);
System.out.println(“X: " + pnt1.x + " Y:” + pnt1.y);
System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
}
Ở phương thức tricky() thì Point temp() = arg1; arg1=arg2; theo em được biết thì với kiểu khai báo trên giá trị của temp phải thay đổi theo arg1 ( đúng không ạ?)
Em đọc giải thích trên JavaWorld nhưng không hiểu lắm:
Trong phương thức main ( ), pnt1 và pnt2 là không hơn gì tham chiếu đối tượng. khi khai báo pnt1 và pnt2 đến tricky( ), java truyền tham trị giống như bất kỳ thông số khác. này có nghĩa là kiểu truyền tham chiếu thực ra chỉ là bản sao của tham chiếu gốc.
Ai có thể giải thích kĩ hơn cho em về tham chiếu trong java được không ạ? Nếu chỉ là bản sao thì tại sao đầu ra pnt1 vẫn có giá trị x = 100 y =100 ạ?
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?