Yanıtlar:
null
Herhangi bir istisna almadan herhangi bir referans türüne başvurabilirsiniz .
println
Nesne denetler boş olup olmadığını, çünkü yöntem boş gösterici atmak değildir. Null ise, dizeyi basar "null"
. Aksi takdirde toString
, o nesnenin yöntemini çağıracaktır .
Daha fazla ayrıntı ekleme: Dahili yazdırma yöntemleri String.valueOf(object)
, giriş nesnesindeki yöntemi çağırır . Ve valueOf
yöntemde, bu kontrol boş işaretçi istisnasını önlemeye yardımcı olur:
return (obj == null) ? "null" : obj.toString();
Karışıklığınızın geri kalanı için, boş bir nesnede herhangi bir yöntemi çağırmak, özel bir durum olmasa bile boş bir işaretçi istisnası atmalıdır.
null
Herhangi bir referans türüne yayın yapabilirsiniz . Ayrıca a öğesini null
bağımsız değişken olarak işleyen yöntemleri de çağırabilirsiniz , örn. System.out.println(Object)
Yapar, ancak bir null
değere başvuramaz ve bu yöntemi çağıramazsınız.
BTW null
Değerler üzerinde statik yöntemler çağırabileceğiniz zor bir durum var .
Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.
t.yield() -> Thread.yeld()
zaten "optimize ettiği" için değil mi? Nasıl final int i = 1; while (i == 1)
optimize edilirwhile(true)
Bu tasarım gereğidir. null
Herhangi bir referans türüne yayın yapabilirsiniz . Aksi takdirde referans değişkenlere atayamazsınız.
Bir yöntemin aşırı yüklendiği ve aşağıdaki aşırı yük yöntemlerine null iletildiği zaman aşağıdaki yapı için döküm null değerleri gereklidir, bu durumda derleyici belirsizliği nasıl temizleyeceğini bilmez, bu nedenle bu durumlarda null yazmamız gerekir:
class A {
public void foo(Long l) {
// do something with l
}
public void foo(String s) {
// do something with s
}
}
new A().foo((String)null);
new A().foo((Long)null);
Aksi takdirde, ihtiyacınız olan yöntemi çağıramazsınız.
String bar = null;
çevirir . Şimdiye kadar sadece bir yöntemin aşırı yüklendiği bir testte açıkça null kullanmak zorunda kaldım ve davranışını null girdi ile test etmek istedim. Yine de, seninkini bulmadan önce benzer bir cevap yazmak üzereydim. null
String
l instanceof Long
ve bu durumlarda s instanceof String
geri dönecektir false
.
Burada birçok cevap zaten belirtiliyor
Herhangi bir referans türüne boş değer atayabilirsiniz
ve
Bağımsız değişken null ise, "null" değerine eşit bir dize
Nerede belirtildiğini merak ettim ve Java Spesifikasyonu'na baktım:
Başvuru null ise, "null" dizesine dönüştürülür (dört ASCII karakteri n, u, l, l).
Diğerlerinin yazdığı gibi, her şeye null değer atabilirsiniz. Normalde buna ihtiyacınız olmaz, şunları yazabilirsiniz:
String nullString = null;
oyuncuları oraya koymadan.
Ancak bu tür yayınların mantıklı olduğu durumlar vardır:
a) Aşağıdaki gibi belirli bir yöntemin çağrıldığından emin olmak istiyorsanız:
void foo(String bar) { ... }
void foo(Object bar) { ... }
o zaman yazarsanız bir fark yaratır
foo((String) null) vs. foo(null)
b) IDE'nizi kod üretmek için kullanmayı düşünüyorsanız; Örneğin ben genellikle gibi birim testleri yazıyorum:
@Test(expected=NullPointerException.class)
public testCtorWithNullWhatever() {
new MyClassUnderTest((Whatever) null);
}
TDD yapıyorum; Bu, "MyClassUnderTest" sınıfının muhtemelen henüz mevcut olmadığı anlamına gelir. Bu kodu yazarak, sonra yeni sınıf oluşturmak için benim IDE kullanabilirsiniz; ve daha sonra "kutudan" ne olursa olsun "argümanını" kabul eden bir kurucu oluşturmak için - IDE testimden kurucunun Whatever türünde tam bir argüman alması gerektiğini anlayabilir.
Bu, aksi takdirde belirsiz olabilecek bir yöntem kullanırken çok kullanışlıdır. Örneğin: JDialog, aşağıdaki imzalara sahip kuruculara sahiptir:
JDialog(Frame, String, boolean, GraphicsConfiguration)
JDialog(Dialog, String, boolean, GraphicsConfiguration)
GraphicsConfiguration ayarlamak istiyorum, ancak bu iletişim kutusu için üst var, bu nedenle ilk bağımsız değişken boş olmalıdır, çünkü bu yapıcı kullanmanız gerekir. kullanma
JDialog(null, String, boolean, Graphicsconfiguration)
belirsiz olduğundan, bu durumda desteklenen türlerden birine null değer atayarak aramayı daraltabilirim:
JDialog((Frame) null, String, boolean, GraphicsConfiguration)
Bu dil özelliği bu durumda kullanışlıdır.
public String getName() {
return (String) memberHashMap.get("Name");
}
MemberHashMap.get ("Name") null değerini döndürürse, yukarıdaki yöntemin istisna atmadan null değerini döndürmesini istersiniz. Sınıf ne olursa olsun null boştur.