2011-08-14 30 views
7

Đây là một điều mà tôi không thể nói là tôi ngạc nhiên nó sẽ không hoạt động, nhưng dù sao tôi cũng tìm được giải thích về trường hợp này . Hãy tưởng tượng chúng ta có một đối tượng:Khởi tạo một đối tượng Java theo một phương pháp riêng biệt: tại sao điều này không hoạt động

SomeClass someClass = null; 

Và một phương pháp mà sẽ mất đối tượng này như một tham số để khởi tạo nó:

public void initialize(SomeClass someClass) { 
    someClass = new SomeClass(); 
} 

Và sau đó khi chúng ta gọi là:

initialize(someClass); 
System.out.println("" + someClass); 

Nó sẽ in:

null 

Cảm ơn câu trả lời của bạn!

+0

có thể trùng lặp của [Có phải Java vượt qua tham chiếu không?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Mat

+0

có thể trùng lặp của [Tôi có thể chuyển tham số bằng tham chiếu trong Java không ?] (http://stackoverflow.com/questions/1068760/can-i-pass-parameters-by-reference-in-java) –

+0

không có dấu chấm hỏi –

Trả lời

9

Không thể thực hiện trong java. Trong C#, bạn sẽ chuyển tham số bằng cách sử dụng từ khóa ref hoặc out. Không có từ khóa như vậy trong java. Bạn có thể xem câu hỏi này để biết chi tiết: Can I pass parameters by reference in Java?

Ngẫu nhiên, vì lý do đó bạn không thể viết hàm hoán đổi trong java có thể hoán đổi hai số nguyên.

1

Như Armen đã đề cập, những gì bạn muốn làm là không thể theo cách này. Tại sao không sử dụng một factory method?

0

Và một phương pháp mà sẽ mất đối tượng này như một tham số để khởi tạo nó:

Phương pháp này không mất một đối tượng như một tham số trong trường hợp của bạn. Nó có một tham chiếu trỏ đến null. Sau đó, nó sao chép tham chiếu này và trỏ nó đến một phiên bản mới của SomeClass. Nhưng rõ ràng, tham chiếu mà bạn đã truyền dưới dạng tham số vẫn trỏ đến null.

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