2013-05-12 28 views
5

Xin chào Tôi đã tự hỏi làm thế nào tôi sẽ có thể gửi một biến như một tham số cho một phương pháp và có nó được thay đổi bởi phương pháp. Ví dụ:Giá trị thay đổi Java của một biến thông qua một phương thức?

public class Main { 
    public static void main(String[] args) { 
     int i = 2; 
     doThis(i); 
     System.out.println(i); 
    } 

    public static void doThis(int i) { 
     i = 3; 
    } 
} 

Tôi muốn in ra 3 thay vì 2. Cảm ơn.

+2

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

+1

http://stackoverflow.com/questions/5614562/how-to-pass-by-reference-in-java xem xét điều này. – Bill

+1

http://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value –

Trả lời

3

Tôi muốn nó để in ra 3 thay vì 2

Thay đổi phương pháp để trả lại giá trị

int i = 2; 
i = doThis(i); 


public static int doThis(int i) { 
    i = 3; 
    return i; 
} 

nó sao chép giá trị của nguyên thủy từ người gọi đến lập luận

+2

+1, là người đầu tiên trả lại giá trị bằng cách sửa đổi phương pháp Chữ ký. – camickr

4

Java không thể làm điều này. Tuy nhiên bạn có thể trả về giá trị từ phương pháp này ...

public static int doThis(int i) { 
    return 3; 
} 

Và nhượng lại ...

int i = 2; 
i = doThis(i); 
+0

Vâng đó là những gì tôi nghĩ. Hmm ... Đã làm quá nhiều C gần đây. – Tommy

+1

Hmm, không chắc chắn tại sao điều này có một upvote kể từ khi phương pháp vẫn trả về void. – camickr

+0

Bạn có thể tạo đối tượng cho phép phương thức nhận và đặt giá trị int (nội bộ cho đối tượng), điều này cho phép bạn sửa đổi giá trị int, bạn chỉ cần sửa đổi đối tượng chính nó – MadProgrammer

0

java là tất cả về đường chuyền bởi giá trị. vì vậy nó sẽ không thay đổi cách bạn muốn. Read here for more

tuy nhiên bạn sau đây để giải quyết vấn đề này

i = doThis(i); 

public static int doThis(int i) { 
    i = 3; 
    return i; 
} 
+0

lý do bỏ phiếu xuống? – Peeyush

+0

xin lỗi về điều đó, nó không phải là một downvote. Nếu bạn thực hiện chỉnh sửa, tôi có thể hủy cập nhật. –

+0

Downvote là ngẫu nhiên, nhưng khi tôi cố gắng loại bỏ nó, nó nói rằng nó bây giờ bị khóa và không thể được gỡ bỏ trừ khi câu trả lời được chỉnh sửa. Nếu bạn thực hiện một số chỉnh sửa tầm thường, tôi có thể xóa bỏ phiếu giảm giá của mình. –

1

Java là đi qua giá trị cho kiểu dữ liệu cơ bản hoặc các đối tượng.
Tham số loại dữ liệu tham chiếu, chẳng hạn như đối tượng, cũng được chuyển vào phương thức theo giá trị.

2

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.

Các vấn đề liên quan