ค่าเริ่มต้นของboolean
(ดั้งเดิม) และBoolean
(wrapper ดั้งเดิม) ใน Java คืออะไร?
ค่าเริ่มต้นของboolean
(ดั้งเดิม) และBoolean
(wrapper ดั้งเดิม) ใน Java คืออะไร?
คำตอบ:
ค่าเริ่มต้นสำหรับBoolean
(วัตถุ) null
เป็น
ค่าเริ่มต้นสำหรับboolean
(ดั้งเดิม) false
เป็น
ค่าเริ่มต้นของใด ๆObject
เช่นเป็นBoolean
null
ค่าเริ่มต้นสำหรับ a boolean
เป็นเท็จ
หมายเหตุ:ดั้งเดิมทุกคนมีคลาส wrapper null
ทุกเสื้อคลุมใช้อ้างอิงซึ่งมีค่าเริ่มต้นของ Primitives มีค่าเริ่มต้นที่แตกต่างกัน:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
หมายเหตุ (2): void
มีเสื้อคลุมVoid
ซึ่งมีค่าเริ่มต้นnull
และเป็นเพียงค่าที่เป็นไปได้ (โดยไม่ใช้แฮ็ก)
Boolean
ก็คือObject
ว่าจะทำให้ความหมายบรรทัดแรกชัดเจน ฟังดูธรรมดา แต่สำหรับคนที่ถามคำถามพื้นฐานเช่นนี้อาจช่วยได้
บูล
สามารถหรือtrue
ค่าเริ่มต้นคือ
false
false
(ที่มา: ตัวแปรดั้งเดิมของ Java )
บูลีน
สามารถเป็นBoolean
วัตถุที่เป็นตัวแทนtrue
หรือfalse
, หรือnull
สามารถ ค่าเริ่มต้นคือ
null
ถ้าคุณต้องการถามคุณต้องเริ่มต้นเขตข้อมูล / ตัวแปรของคุณอย่างชัดเจนเพราะถ้าคุณต้องค้นหามันก็มีโอกาสที่คนอื่นจะต้องทำเช่นนั้น
คุ้มค่าสำหรับดั้งเดิมboolean
เป็นเท็จที่สามารถเห็นได้ที่นี่
ตามที่ผู้อื่นกล่าวถึงค่าสำหรับ a Boolean
จะเป็นโมฆะโดยค่าเริ่มต้น
บูลีนเป็นวัตถุ ดังนั้นถ้ามันเป็นตัวแปรอินสแตนซ์มันจะเป็นโมฆะ ถ้ามันถูกประกาศในวิธีการคุณจะต้องเริ่มต้นมันหรือจะมีข้อผิดพลาดของคอมไพเลอร์
หากคุณประกาศว่าเป็นดั้งเดิมเช่นบูลีน ค่าจะเป็นเท็จโดยค่าเริ่มต้นหากเป็นตัวแปรอินสแตนซ์ (หรือตัวแปรคลาส) ถ้ามันถูกประกาศภายในเมธอดคุณจะยังคงต้องเริ่มต้นเป็นจริงหรือเท็จหรือจะมีข้อผิดพลาดคอมไพเลอร์
เตรียมBoolean
สมาชิก (ที่จริงมีการอ้างอิงถึงวัตถุของการพิมพ์Boolean
) null
จะมีค่าเริ่มต้นของ
uninitialized boolean
(ดั้งเดิม) false
สมาชิกจะมีค่าเริ่มต้นของ
Boolean
ไม่มีค่าเริ่มต้นคือ Boolean
จะต้องมีการสร้างด้วยหรือboolean
String
ถ้าวัตถุที่ถูก unintialized null
ก็จะชี้ไปที่
ค่าเริ่มต้นของดั้งเดิมคือboolean
false
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 จัดสรรหน่วยความจำและค่าอะไรก็ตามที่หน่วยความจำเกิดขึ้นมีเหมือนกันกับค่าของ 'เท็จ' แต่สำหรับการปฏิบัติพวกเขาเป็นสิ่งเดียวกัน