Java chuyển mọi thứ theo giá trị, vì vậy nếu bạn sử dụng toán tử gán trong một phương thức lớp bạn sẽ không thay đổi đối tượng gốc.
Ví dụ:
public class Main {
public static void main(String[] args) {
Integer i = new Integer(2);
setToThree(i);
System.out.println(i);
}
public static void setToThree(Integer i) {
i = new Integer(3);
}
}
sẽ in 2.
Có nói rằng, nếu đối tượng bạn đang đi trong một tham chiếu đến là có thể thay đổi bạn có thể thay đổi nó trong họ cách bạn đang nghĩ đến.
Ví dụ:
public class Main {
public static void main(String[] args) {
MyMutableInt i = new MyMutableInt(2);
setToThree(i);
System.out.println(i);
}
public static void setToThree(MyMutableInt i) {
i.set(3);
}
}
này sẽ in 3 (giả sử MyMutableInt có một phương pháp đúng toString()).
Tất nhiên, Số nguyên Java là không thay đổi và do đó không có khả năng thay đổi như vậy. Vì vậy, bạn có 2 lựa chọn ở đây:
Lưu ý: điều này không hoạt động với bất kỳ hình thức nguyên thủy nào. Cho rằng bạn sẽ phải trả lại bằng giá trị trả lại. Nếu bạn có nhiều giá trị để thay đổi, bạn sẽ phải bao bọc chúng trong một đối tượng để trả về chúng, vì vậy bạn cũng có thể sử dụng phương thức này.
Nguồn
2013-05-12 05:42:51
Việc sử dụng Java truyền theo giá trị, do đó bạn không thể chuyển sang nguyên thủy và sửa đổi giá trị nguyên thủy. Bạn có thể vượt qua trong một mảng trên số nguyên và sau đó sửa đổi các số nguyên trong mảng hoặc trả về một số nguyên khác nhau. – camickr
http://stackoverflow.com/questions/5614562/how-to-pass-by-reference-in-java xem xét điều này. – Bill
http://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value –