2012-01-17 23 views
6

thể trùng lặp:
Does Java guarantee that Object.getClass() == Object.getClass()?Có thể so sánh các đối tượng java.lang.Class với == trong Java không?

Nếu tôi có một lớp như

Class<? extends MyObject> aClass = ...; 

thể tôi sau đó làm:

if (aClass == MySubObject.class) { ... } 

hoặc tôi phải làm

if (aClass.equals(MySubObject.class)) { ... } 

Ngoài ra, để biết câu trả lời, tôi rất muốn biết tham chiếu tức là nơi xác định điều này.

Tôi thích sử dụng == nếu có thể, vì tôi thấy nó dễ đọc hơn và nhanh hơn. (Rõ ràng nó không phải rằng có rất nhiều dễ đọc hơn, hoặc rằng có rất nhiều nhanh hơn, nhưng vẫn còn, tại sao sử dụng một giải pháp phức tạp hơn nếu một giải pháp đơn giản có sẵn.)

+1

http://stackoverflow.com/questions/3738919/does-java-guarantee-that-object-getclass-object-getclass –

+0

Một trang khác http://stackoverflow.com/questions/928531/does-java-have -an-is-type-of-class-test-method –

+0

http://stackoverflow.com/questions/5997801/java-comparing-classes-with-or-equals-is-there-a-difference –

Trả lời

7

Bạn có thể sử dụng == nhưng bạn có được gì bởi vì đó là chính xác những gì Class.equals().

Lớp không xác định phương thức bằng, do đó, nó kế thừa từ Đối tượng. Bạn có thể đọc nguồn để xem điều này.

Tôi sử dụng equals nếu có thể thì tôi không cần phải suy nghĩ về điều đó. Khi tôi đọc mã (bao gồm cả mã của tôi), tôi vẫn không cần phải tự hỏi mình là == giống như equals hay không cho lớp này.

+5

Vâng, bạn đạt được một cái gì đó: '==' là không an toàn. – yankee

+5

@yankee đúng, trong trường hợp này bạn có thể viết. 'MySubObject.class.equals (aClass)' –

5

Bạn có thể so sánh các lớp với == và giống như equals đối với trường hợp Class, nhưng ví dụ của bạn cho thấy bạn muốn biết một lớp có mối quan hệ "là-a" với người khác hay không. Hai lớp chỉ bằng nhau nếu chúng cùng lớp, và rõ ràng là Vehicle.class != Car.class.

Nếu bạn muốn biết liệu một Car là-một Vehicle, sử dụng Class#isAssignableFrom.

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