Java null nedir?
null
nedir?
null
Her şey bir örneğidir?
Ne set null
mı ait?
Nasıl hafızasında temsil edilir?
CEVAP
Boş bir şey, bir örneği?
Hayır, null
instanceof
Bir tür yok.
15.20.2 Type Comparison Operator instanceof
RelationalExpression: RelationalExpression instanceof ReferenceType
Çalışma zamanında,
instanceof
operatörün sonuç değeritrue
RelationalExpressionnull
ve başvuru için döküm olabilirReferenceTypeClassCastException
bir yükseltme olmadan. Aksi takdirde sonuçfalse
.
Bu herhangi bir türü için E
herhangi o == null
, o instanceof R
** ** E o
* 15 * her zaman * 19 * olduğu anlamına gelir.
Ne ayarlayın '' ait? null
JLS 4.1 The Kinds of Types and Values
Ayrıca bir özel vardırnulltürü, ifade türü henüz ismi
null
,. Çünkünulltür adı yok, imkansız bir değişken bildirmek içinnullyazın veya atama içinnullyazın.null
başvuru ifadesi mümkün olan tek değerdirnullyazın.null
referans her zaman herhangi bir referans türüne çevirebilirsiniz. Uygulamada, programcı yok sayabilirsiniznullyazın ve sadecenull
sadece herhangi bir başvuru türü bir özel değişmez olduğunu kabul edelim.
Null nedir?
Bu İDEA, yukarıda alıntı olarak, pratikte sadece bu kadar iddia edebilirsin diyor "sadece herhangi bir başvuru türü bir özel değişmez".
Java null == null
(bu her zaman diğer dillerde böyle değil). Sözleşme, aynı zamanda bu özel mülkiyet (java.lang.Object
) olduÄŸunu da not:
public boolean equals(Object obj)
Olmayan
null
herhangi bir referans deÄŸerx
,x.equals(null)
return false
.
Ayrıcavarsayılan değer(bunlara sahip olmayan değişkenler için) tüm başvuru türleri için:
JLS 4.12.5 Initial Values of Variables
- Her sınıf, değişken, örnek değişken veya dizi bileşen ile başlatıldıvarsayılan değeroluşturulduğunda:
- Tüm başvuru türleri için varsayılan değer
null
.
Bu nasıl kullanılacağı değişir. Buna ne denir etkinleştirmek için kullanabilirsinizgeç başlatmaalan, bir alan aslında eskiden bu kadar null
başlangıç değeri olurdu, "" değerini hesaplamak için pahalı olabilir). gerçek yerini nerede
Aynı zamanda diğer anlamları vardır. java.lang.System
gerçek bir örnek verelim:
public static Console console()
Verir: Sistem varsa konsol, aksi takdirde
null
.
Bu çok yaygın bir kullanım deseni: null
-var olmayan bir nesnenin belirtmek için kullanılır.
Burada başka bir kullanım örneği, java.io.BufferedReader
bu sefer:
public String readLine() throws IOException
Verir: Eğer akışın sonuna ulaşıldı 39* *satır, satır sonlandırma karakterleri, veya
null
herhangi dahil içeriğini içeren.
Burada, readLine()
sonunda null
sonunu göstermek için dönünceye kadar her bir hat için instanceof String
döndürecektir. Bu, aşağıdaki gibi her satırı işlemek için izin verir
String line;
while ((line = reader.readLine()) != null) {
process(line);
}
Bir fesih durumu readLine()
null
, dönen bağlı değildir, böylece API tasarlayabilir ama bu tasarım işleri kısa yapma avantajına sahip olduğu görülmektedir. Boş bir satır 47* *çünkü boş satır ile bir sorun yoktur, hiç unutmayın.
Başka bir örnek verelim, java.util.Map<K,V>
bu sefer:
V get(Object key)
DeÄŸeri belirtilen key eÄŸer bu harita eÄŸer eÅŸleÅŸtirilmiÅŸ, veya
null
döner anahtarı için hiçbir eşleştirme içerir.Eğer bu haritayı verir
null
değerleri, sonra bir dönüş değerinull
yok ille gösteren bir harita içerir hiçbir eşleştirme için anahtar; onun da mümkün olduğunu harita açıkça haritalar tuşunull
.containsKey
ameliyat Bu iki dava etmek için kullanılır.
Burada null
kullanarak işleri karıştırır nasıl görmeye başlarız. İlk deyim, anahtarı, null
eşlenmiş değil mi eğer iade olduğunu söylüyor. İkinci ifade ise anahtarı null
eşleştirilmiş bile olabilir diyorayrıcaiade edilmesi.
null
izin vermeyerek buna karşılık, java.util.Hashtable
basit şeyler tutar anahtarları ve değerleri; null
, açıkça dönerse V get(Object key)
, anahtar eşlenen olmadığı anlamına gelir.
API geri kalanını okuyun ve null
kullanıldığı bulabilirsiniz. Her zaman değil unutmayınen iyi uygulamaörnekler.
Genel olarak konuÅŸursak, null
belirtmek için özel bir değer olarak kullanılır:
- Başlatılmamış devlet
- Fesih şartı
- Mevcut olmayan nesne
- Bilinmeyen bir deÄŸer
Nasıl hafızasında temsil edilir?
Java? Seni ilgilendirmez. Ve en iyi o ÅŸekilde duruyor.
null
iyi bir ÅŸey mi?
Bu şimdi sınırda özneldir. Bazı insanlar null
önlenebilirdi birçok programcı hataları neden olacağını söylüyorlar. Bazı Java gibi NullPointerException
yakalar bir dil, iyi başarısız-hızlı olacak, çünkü bunu kullanmak için programcı hataları olduğunu söylüyorlar. Bazı insanlar Null object pattern, vb kullanarak null
kaçının.
Bu kendi başına çok büyük bir konu olduğunu, en iyi başka bir soruya cevap olarak tartışıldı.
null
kendini mucidi, C.A.R Hoare (quicksort şöhret): bir Alıntı ile bitireceğim
Bu milyar dolarlık hata benim diyorum.1965 yılında
null
başvuru icat edildi. O zaman, nesne yönelimli bir dil (ALGOL W) başvuruları için ilk kapsamlı tür sistemi tasarımı yaptım. Amacım tüm referanslarını kontrol kullanın otomatik olarak derleyici tarafından gerçekleştirilen kesinlikle güvenli olmalı, emin olmak için. Ama sadece uygulamak için çok kolay oldu çünkünull
bir referans koymak için günaha karşı koyamadım. Belki de bu son kırk yıl içinde acı ve zarar milyarlarca dolar neden olan sayısız hatalar, güvenlik açıkları ve sistem çöker yol açtı.
video of this presentation daha derindir; tavsiye edilen bir saat.
ETMENİZ için Java karşılığı nedir?...
C Çifti eşdeğer<L,R> Java nedir?...
Java singleton deseni uygulamak için e...
Yumuşak bir referans ve Java zayıf bir...
Java bir Toplama filtresi için en iyi ...