ค่าเริ่มต้นของboolean(ดั้งเดิม) และBoolean(wrapper ดั้งเดิม) ใน Java คืออะไร?
ค่าเริ่มต้นของboolean(ดั้งเดิม) และBoolean(wrapper ดั้งเดิม) ใน Java คืออะไร?
คำตอบ:
ค่าเริ่มต้นสำหรับBoolean(วัตถุ) nullเป็น
ค่าเริ่มต้นสำหรับboolean(ดั้งเดิม) falseเป็น
ค่าเริ่มต้นของใด ๆObjectเช่นเป็นBooleannull
ค่าเริ่มต้นสำหรับ a booleanเป็นเท็จ
หมายเหตุ:ดั้งเดิมทุกคนมีคลาส wrapper nullทุกเสื้อคลุมใช้อ้างอิงซึ่งมีค่าเริ่มต้นของ Primitives มีค่าเริ่มต้นที่แตกต่างกัน:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
หมายเหตุ (2): voidมีเสื้อคลุมVoidซึ่งมีค่าเริ่มต้นnullและเป็นเพียงค่าที่เป็นไปได้ (โดยไม่ใช้แฮ็ก)
Booleanก็คือObjectว่าจะทำให้ความหมายบรรทัดแรกชัดเจน ฟังดูธรรมดา แต่สำหรับคนที่ถามคำถามพื้นฐานเช่นนี้อาจช่วยได้
บูล
สามารถหรือtrue ค่าเริ่มต้นคือ
falsefalse
(ที่มา: ตัวแปรดั้งเดิมของ Java )
บูลีน
สามารถเป็นBooleanวัตถุที่เป็นตัวแทนtrueหรือfalse, หรือnullสามารถ ค่าเริ่มต้นคือ
null
ถ้าคุณต้องการถามคุณต้องเริ่มต้นเขตข้อมูล / ตัวแปรของคุณอย่างชัดเจนเพราะถ้าคุณต้องค้นหามันก็มีโอกาสที่คนอื่นจะต้องทำเช่นนั้น
คุ้มค่าสำหรับดั้งเดิมbooleanเป็นเท็จที่สามารถเห็นได้ที่นี่
ตามที่ผู้อื่นกล่าวถึงค่าสำหรับ a Booleanจะเป็นโมฆะโดยค่าเริ่มต้น
บูลีนเป็นวัตถุ ดังนั้นถ้ามันเป็นตัวแปรอินสแตนซ์มันจะเป็นโมฆะ ถ้ามันถูกประกาศในวิธีการคุณจะต้องเริ่มต้นมันหรือจะมีข้อผิดพลาดของคอมไพเลอร์
หากคุณประกาศว่าเป็นดั้งเดิมเช่นบูลีน ค่าจะเป็นเท็จโดยค่าเริ่มต้นหากเป็นตัวแปรอินสแตนซ์ (หรือตัวแปรคลาส) ถ้ามันถูกประกาศภายในเมธอดคุณจะยังคงต้องเริ่มต้นเป็นจริงหรือเท็จหรือจะมีข้อผิดพลาดคอมไพเลอร์
เตรียมBooleanสมาชิก (ที่จริงมีการอ้างอิงถึงวัตถุของการพิมพ์Boolean) nullจะมีค่าเริ่มต้นของ
uninitialized boolean(ดั้งเดิม) falseสมาชิกจะมีค่าเริ่มต้นของ
Booleanไม่มีค่าเริ่มต้นคือ Booleanจะต้องมีการสร้างด้วยหรือboolean Stringถ้าวัตถุที่ถูก unintialized nullก็จะชี้ไปที่
ค่าเริ่มต้นของดั้งเดิมคือbooleanfalse
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
nullเริ่มต้น nullเป็นค่าเริ่มต้นดังนั้นฉันไม่แน่ใจว่าสิ่งที่คุณอ้างถึงเมื่อคุณพูดว่าไม่มี คุณอาจหมายถึงบางสิ่งเช่น " Booleanไม่ใช่trueหรือfalseโดยเริ่มต้น"?)
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;
}
}
เอาท์พุท:
primitive: false
object: null
ดูเหมือนว่าจะเห็นได้ชัด แต่ฉันมีสถานการณ์ที่แจ็กสันในขณะที่ทำให้วัตถุเป็นอนุกรมกับ JSON กำลังขว้าง NPE หลังจากเรียกผู้ทะเยอทะยานเช่นเดียวกับสถานการณ์นี้ที่ส่งคืนบูลีนดั้งเดิมที่ไม่ได้รับมอบหมาย สิ่งนี้ทำให้ฉันเชื่อว่าแจ็คสันได้รับโมฆะและพยายามเรียกวิธีการเกี่ยวกับมันดังนั้น NPE ฉันผิดไป.
คุณธรรมของเรื่องราวคือเมื่อ Java จัดสรรหน่วยความจำสำหรับดึกดำบรรพ์หน่วยความจำนั้นมีค่าแม้ว่าจะไม่ได้กำหนดค่าเริ่มต้นซึ่ง Java เท่ากับค่าเท็จสำหรับบูลีน ในทางตรงกันข้ามเมื่อจัดสรรหน่วยความจำสำหรับวัตถุที่ซับซ้อนที่ไม่ได้กำหนดค่าเริ่มต้นเช่นบูลีนมันจะจัดสรรพื้นที่สำหรับการอ้างอิงไปยังวัตถุนั้นไม่ใช่วัตถุเอง - ไม่มีวัตถุในหน่วยความจำที่จะอ้างถึง - ดังนั้นการแก้ไขผลการอ้างอิงนั้น
ฉันคิดว่าการพูดอย่างเคร่งครัดว่า "ค่าเริ่มต้นเป็นเท็จ" นั้นเป็นเพียงเล็กน้อย ฉันคิดว่า Java ไม่ได้จัดสรรหน่วยความจำและกำหนดค่าเป็นเท็จจนกว่าจะมีการตั้งค่าไว้อย่างชัดเจน ฉันคิดว่า Java จัดสรรหน่วยความจำและค่าอะไรก็ตามที่หน่วยความจำเกิดขึ้นมีเหมือนกันกับค่าของ 'เท็จ' แต่สำหรับการปฏิบัติพวกเขาเป็นสิ่งเดียวกัน