package myintergertest;
/**
*
* @author Engineering
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//this one does not increment
Integer n = new Integer(0);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
//this one will increment
MyIntegerObj myInt = new MyIntegerObj(1);
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
}
public static void Increment(Integer n) {
//NO. this doesn't work because a new reference is being assigned
//and references are passed by value in java
n++;
}
public static void Increment(MyIntegerObj n) {
//this works because we're still operating on the same object
//no new reference was assigned to n here.
n.plusplus(); //I didn't know how to implement a ++ operator...
}
}
Kết quả cho tất cả là n = 0. Số nguyên n là một đối tượng và do đó được truyền qua tham chiếu, vậy tại sao số tăng không phản ánh lại trong phương thức người gọi (chính)? Tôi dự kiến đầu ra là n = 0 n = 1 n = 2 v.v ...Cách tăng một lớp Giá trị tham chiếu nguyên trong java từ phương thức khác
CẬP NHẬT: Lưu ý Tôi đã cập nhật ví dụ mã ở trên. Nếu tôi hiểu đúng, Jon Skeet đã trả lời câu hỏi tại sao myInt sẽ tăng lên và tại sao n lại không. Đó là bởi vì n đang nhận được một tham chiếu mới được gán trong phương thức Increment. Nhưng myInt KHÔNG được gán một tham chiếu mới vì nó gọi hàm thành viên.
Điều đó có vẻ như tôi hiểu chính xác lol?
Ý của bạn là nói '** Đối tượng ** được chuyển bởi giá trị - ...'? – FrustratedWithFormsDesigner
Không, anh không làm thế.Nguyên thủy và tham chiếu được truyền theo giá trị. Các đối tượng không được truyền; họ sống trên đống. – danben
Tôi nghĩ rằng tôi hiểu, xem các cập nhật của tôi và cho tôi biết. cảm ơn!!! – cchampion