Java'da 'boolean' ve 'Boolean' varsayılan değeri


260

Java'da boolean(ilkel) ve Boolean(ilkel sarmalayıcı) varsayılan değerleri nelerdir ?

Yanıtlar:



390

Herhangi varsayılan değeri Objectgibi Boolean, olduğu null.

A için varsayılan değer booleanfalse değeridir .

Not: Her ilkel bir sarmalayıcı sınıfına sahiptir. Her sarmalayıcı, varsayılan değeri olan bir başvuru kullanır null. Temel öğeler farklı varsayılan değerlere sahiptir:

boolean -> false

byte, char, short, int, long -> 0

float, double -> 0.0

Not (2): varsayılan değeri olan ve yalnızca olası değer olan (korsan kullanmadan) voidbir sarmalayıcıya Voidsahiptir null.


2
Bir söz düşünüyorum Booleanedilir Object, yani ilk satır bariz anlamı olur. Bu oldukça basit geliyor, ancak böyle temel bir soru soran biri için yardımcı olabilir.
Suma

23

boolean
olabilir trueveya false.
Varsayılan değer şudur false.

(Kaynak: Java İlkel Değişkenleri )

Boole
bir olabilir Booleannesne temsil trueveya false, ya olabilir null.
Varsayılan değer şudur null.


17

Sormanız gerekiyorsa, alanlarınızı / değişkenlerinizi açıkça başlatmanız gerekir, çünkü eğer bakmak zorundaysanız, başka birinin de bunu yapması gerekir.

Bir ilkel için değer buradaboolean görüldüğü gibi yanlıştır .

Başkaları tarafından belirtildiği gibi, a değeri Booleanvarsayılan olarak boş olacaktır.


Resmi kaynağa başvurduğunuz için teşekkür ederiz. Başlatma ile ilgili olarak, bilgi eksikliğini telafi etmeye gerek yoktur.
LoBo

2
'Bilgi eksikliği', karşılaştırılması beklenen bir seviyenin olduğunu gösterir. Eğer bu asgari bilgi seviyesi açıksa, katılıyorum. Değilse, daha açık olma konusunda hata yapmanın ihtiyatlı olduğunu düşünüyorum. Tüm bunlar oldukça kişisel / ekip kararı / görüşündedir.
Peter Tillemans

4
@LoBo - Bence potansiyel bilgi eksikliğini telafi etmede yanlış bir şey yok. Kodunuzu kimin saklayacağını bilmiyorsunuz. Kodunuzu daha kolay anlaşılır ve / veya okunabilir kılan, ancak performans üzerinde çok az etkisi olan her şey sadece iyi bir şey olabilir.
ferekdoley

9

Boolean bir Nesnedir. Yani bir örnek değişkeni ise null olur. Bir yöntem içinde bildirilirse, onu başlatmanız gerekir veya bir derleyici hatası olacaktır.

İlkel yani boolean olarak bildirirseniz. Bir örnek değişkeni (veya sınıf değişkeni) ise değer varsayılan olarak false olur. Bir yöntem içinde bildirilirse, yine de true veya false olarak başlatmanız gerekir veya bir derleyici hatası olacaktır.


6

Başlatılmamış bir Booleanüye (aslında türdeki bir nesneye başvuru Boolean) varsayılan değerine sahip olacaktır null.

Başlatılmamış boolean(ilkel) bir üyenin varsayılan değeri olacaktır false.


4

İçin varsayılan yok Boolean. Booleana booleanveya a ile oluşturulmalıdır String. Nesne tarafsız değilse, işaret eder null.

İlkel booleaniçin varsayılan değer şudur false.

http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


Bence bu 3 downvotes, oldukça belirsiz bir ifade olan "varsayılan yok" diyorsunuz. Dediğiniz gibi, başlatılmamış bir nesne referansı null. nullvarsayılan, bu yüzden biri olmadığını söylediğinde ne bahsettiğinizden emin değilim. (Belki de "varsayılan Booleanolarak ne truede falsevarsayılan" gibi bir şey mi demek istediniz ?)
Radiodef

Evet, koyduğunuz daha doğru. Daha özlü kabul edilmiş bir cevap zaten var. Bir gönderiyi aşağı indirip düzenleyerek neyin kazanıldığından emin değilim.
Stealth Rabbi

1
Açıklığa kavuşturmak için indirmedim ve düzenlemem yorumumla tamamen ilgisizdi. Önerilen ifadeyi onaylarsanız cevabı düzenlemenizi tavsiye ederim ve ardından temizlemek için yorumlarımızı silebiliriz.
Radiodef

1
class BooleanTester
{
    boolean primitive;
    Boolean object;

    public static void main(String[] args) {
        BooleanTester booleanTester = new BooleanTester();
        System.out.println("primitive: " + booleanTester.getPrimitive());
        System.out.println("object: " + booleanTester.getObject());
}

    public boolean getPrimitive() {
        return primitive;
    }

    public Boolean getObject() {
        return object;
    }
}

çıktı:

primitive: false
object: null

Bu açık görünüyor ama Jackson'ın bir nesneyi JSON'a serileştirirken, tıpkı bunun gibi, atanmamış ilkel bir boole döndüren bir alıcıyı çağırdıktan sonra bir NPE fırlattığı bir durum vardı. Bu beni Jackson'ın null aldığını ve üzerinde bir yöntem, dolayısıyla NPE'yi çağırmaya çalıştığına inanmamı sağladı. Ben hatalıydım.

Hikayenin ahlakı, Java'nın bir ilkel için bellek ayırması durumunda, bu belleğin başlatılmasa bile bir değere sahip olması, Java'nın bir boole için false değerine eşit olmasıdır. Buna karşılık, Boole gibi başlatılmamış bir karmaşık nesne için bellek ayırırken, nesnenin kendisi için değil, yalnızca o nesneye başvuru için alan ayırır - başvuruda bulunacak hiçbir nesne yoktur - bu nedenle bu sonuç çözümlendiğinde çözüm boş olur.

Kesinlikle konuşmak gerekirse, "varsayılanı yanlış" biraz işaret dışı olduğunu düşünüyorum. Java bellek ayırmak ve açıkça ayarlanana kadar yanlış bir değer atama düşünüyorum; Java'nın belleği ayırdığını düşünüyorum ve belleğin sahip olduğu değer 'false' değeriyle aynıdır. Ancak pratik amaçlı olarak aynı şeydir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.