2013-01-25 11 views
12

Olası Çoğalt: Geçenlerde geri birkaç gün kodlama yaparken bu merakı geldi ve şu olur nedenini anlamaya gibi olamaz
Which constructor is chosen when passing null?Java'da bir kurucuya gönderildiğinde, "boş" değeri ne yapar?

:

Verilen aşağıdaki sınıf

new RandomObject(null); araması yapıldığında, çıkış, kurucunun oluşturulduğu sıraya bakmaksızın her zaman 2 olur. Neden null, nesne yerine dize dizisine başvurur? Seçim için iki durum varsa

+0

@guido diğer soru 2 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '''''' ile bir durumdur, burada bir farklı bir –

cevap

14

Burada anahtar Nesne String []

Java süper türüdür tür vakaları çözmek için en spesifik mevcut yöntem kullanır olmasıdır. Null, derleme hataları olmaksızın her iki yönteme de aktarılabilir, bu yüzden Java'nın burada en özel yöntemi bulması gerekir. String [] ile sürüm daha spesifiktir - bu nedenle yürütme için seçilecektir.

6

Someone else has had this question earlier, check this post

, derleyici ilk daha spesifik durum almaya çalışacaktır. Bu durumda, String Object üzerinden seçilecektir. String[] onun süper tip Object daha spesifik veri türü, bu çekilir olduğundan

diğer soruya yılında, String str yerine Böylece

String[] s oldu.

+0

arasındaki fark burada ve burada, dize yerine String [] yerine değil, ancak nesne yerine AnObject –

+1

@guido Bu yazı ve size yaptığım yorum 2 farklı bağlantıdan bahsediyor. Lütfen bu yayının ilk satırındaki bağlantıyı okuyun. –