Nilai default 'boolean' dan 'Boolean' di Jawa

260

Apa nilai default boolean(primitif) dan Boolean(bungkus primitif) di Jawa?

Makky
sumber

Jawaban:

511

Nilai default untuk Boolean(objek) adalah null.
Nilai default untuk a boolean(primitif) adalah false.

Pangeran John Wesley
sumber
5
tolong tambahkan tautan
sangat
390

Nilai default apa pun Object, seperti Boolean, adalah null.

Nilai default untuk a booleanadalah false.

Catatan: Setiap primitif memiliki kelas pembungkus. Setiap bungkus menggunakan referensi yang memiliki standar null. Primitif memiliki nilai default yang berbeda:

boolean -> false

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

float, double -> 0.0

Catatan (2): void memiliki pembungkus Voidyang juga memiliki default nulldan hanya nilai yang mungkin (tanpa menggunakan peretasan).

Peter Lawrey
sumber
2
Saya pikir yang bisa disebutkan Booleanadalah Object, itu akan membuat makna baris pertama menjadi jelas. Ini kedengarannya sangat mendasar, tetapi bagi seseorang yang mengajukan pertanyaan mendasar seperti ini, ini mungkin membantu.
Suma
23

boolean
Bisa trueatau false.
Nilai default adalah false.

(Sumber: Java Primitive Variables )

Boolean
Dapat berupa Booleanobjek yang mewakili trueatau false, atau bisa juga null.
Nilai default adalah null.

Bastardo
sumber
17

Jika Anda perlu bertanya, maka Anda perlu menginisialisasi bidang / variabel Anda secara eksplisit, karena jika Anda harus mencarinya, maka kemungkinan orang lain juga perlu melakukannya.

Nilai untuk primitif booleansalah seperti yang dapat dilihat di sini .

Seperti yang disebutkan oleh orang lain, nilai untuk Booleanakan menjadi nol secara default.

Peter Tillemans
sumber
Terima kasih untuk referensi ke sumber resmi. Untuk inisialisasi, tidak perlu mengimbangi kurangnya pengetahuan.
LoBo
2
'Kurang pengetahuan' menyiratkan bahwa ada beberapa tingkat yang diharapkan untuk dibandingkan. Jika tingkat pengetahuan minimal ini jelas, saya setuju. Jika tidak, saya merasa bijaksana untuk bersikap lebih eksplisit. Dalam semua ini adalah keputusan / pendapat yang agak pribadi / tim.
Peter Tillemans
4
@ LoBo - Saya pikir tidak ada yang salah dengan mengkompensasi potensi kurangnya pengetahuan. Anda tidak tahu siapa yang akan mempertahankan kode Anda. Apa pun yang membuat kode Anda lebih mudah dipahami dan / atau dibaca, sementara hanya berdampak kecil pada kinerja, hanya bisa menjadi hal yang baik.
ferekdoley
9

Boolean adalah Obyek. Jadi jika itu adalah variabel instan maka akan menjadi nol. Jika dideklarasikan dalam metode, Anda harus menginisialisasi, atau akan ada kesalahan kompiler.

Jika Anda mendeklarasikan sebagai boolean yaitu primitif. Nilai akan salah secara default jika itu adalah variabel instan (atau variabel kelas). Jika dideklarasikan dalam metode, Anda masih harus menginisialisasi ke true atau false, atau akan ada kesalahan kompiler.

planetjones
sumber
6

Anggota yang tidak diinisialisasi Boolean(sebenarnya referensi ke objek jenis Boolean) akan memiliki nilai defaultnull .

Anggota yang tidak diinisialisasi boolean(primitif) akan memiliki nilai default sebesar false.

codaddict
sumber
4

Tidak ada standar untuk Boolean. Booleanharus dibangun dengan a booleanatau a String. Jika objek tidak diintegrasikan, itu akan menunjuk kenull .

Nilai default primitif booleanadalahfalse .

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

Rabi Siluman
sumber
Saya pikir ketiga downvotes itu karena Anda mengatakan "tidak ada standar" yang merupakan pernyataan yang tidak jelas. Seperti yang Anda katakan, referensi objek yang tidak diinisialisasi mengarah ke null. nulladalah default, jadi saya tidak yakin apa yang Anda maksud ketika Anda mengatakan tidak ada. (Apakah Anda mungkin bermaksud sesuatu seperti " Booleantidak trueatau tidak falsesecara default"?)
Radiodef
Ya, apa yang Anda masukkan lebih akurat. Sudah ada jawaban yang diterima yang lebih ringkas. Saya tidak yakin apa yang didapat dengan mengirim dan mengeditnya.
Stealth Rabbi
1
Untuk memperjelas, saya tidak melakukan downvote dan hasil edit saya sama sekali tidak terkait dengan komentar saya. Saya akan merekomendasikan untuk mengedit jawaban jika Anda menyetujui frasa yang disarankan, dan kemudian kami dapat menghapus komentar kami untuk dibersihkan.
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;
    }
}

keluaran:

primitive: false
object: null

Ini tampak jelas tetapi saya memiliki situasi di mana Jackson, sementara membuat serial objek ke JSON, melempar NPE setelah memanggil pengambil, seperti yang ini, yang mengembalikan boolean primitif yang tidak ditugaskan. Ini membuat saya percaya bahwa Jackson menerima nol dan mencoba memanggil metode untuk itu, maka NPE. Saya salah.

Moral dari cerita ini adalah bahwa ketika Jawa mengalokasikan memori untuk primitif, memori itu memiliki nilai bahkan jika tidak diinisialisasi, yang Jawa nyatakan sebagai false untuk boolean. Sebaliknya, ketika mengalokasikan memori untuk objek kompleks tak diinisialisasi seperti Boolean, itu hanya mengalokasikan ruang untuk referensi ke objek itu, bukan objek itu sendiri - tidak ada objek dalam memori untuk merujuk - jadi menyelesaikan referensi yang menghasilkan nol.

Saya pikir secara tegas, "default ke false" sedikit melenceng. Saya pikir Java tidak mengalokasikan memori dan memberinya nilai false sampai secara eksplisit ditetapkan; Saya pikir Java mengalokasikan memori dan nilai apa pun yang memori miliki adalah sama dengan nilai 'salah'. Tetapi untuk tujuan praktis mereka adalah hal yang sama.

snakedog
sumber