อะไรเป็นโมฆะใน Java?


252

คือnullอะไร

เป็นnullตัวอย่างของอะไร?

ชุดอะไรnullเป็นของ?

มันเป็นตัวแทนในหน่วยความจำได้อย่างไร?


yegor256 เกี่ยวกับ null จาก JLS "ตัวอักษร Null ชนิดของ Null มีหนึ่งค่าคือค่าอ้างอิง Null ที่แทนด้วยค่า Null ตามตัวอักษรซึ่งเกิดขึ้นจากตัวอักษร ASCII ตัวอักษร Null นั้นจะเป็นชนิด null เสมอ" เกี่ยวกับคะแนนในบทความ 'วัตถุที่ไม่แน่นอนและไม่สมบูรณ์' เป็นคุณสมบัติ 'Slow Failing' คือความสามารถในการออกแบบ 'การคิดด้วยคอมพิวเตอร์กับการคิดเชิงวัตถุ' เป็นเพียงวิธีการคิดสองวิธี 'Semantic ที่คลุมเครือ' เป็นอัตนัยเกินไป 'Ad-hoc Error Error' เป็นอีกหนึ่งประเภทของการทำงานที่มีข้อผิดพลาด Null เป็นตัวอักษรหรือสิ่งอื่นที่ระบุใน JLS ในทางตรงกันข้ามกับการไม่ดีหรือไม่ดี
Oleksii Kyslytsyn

คำตอบ:


310

โมฆะเป็นตัวอย่างของอะไร?

ไม่มีมีเป็นชนิดที่ไม่มีเป็นnullinstanceof

15.20.2 ตัวดำเนินการเปรียบเทียบชนิด instanceof

RelationalExpression:
    RelationalExpression instanceof ReferenceType

ในเวลาทำงานผลมาจากการที่instanceofผู้ประกอบการคือtrueถ้าค่าของRelationalExpressionไม่ได้nullและการอ้างอิงอาจถูกโยนไปReferenceTypeClassCastExceptionโดยไม่ต้องยก falseมิฉะนั้นผลที่ได้คือ

ซึ่งหมายความว่าสำหรับประเภทใดEและRสำหรับการใด ๆE oที่o == null, อยู่เสมอo instanceof Rfalse


ชุด 'null' เป็นของอะไร

JLS 4.1 ประเภทและค่านิยม

นอกจากนี้ยังมีประเภทnullพิเศษประเภทของการแสดงออกnullซึ่งไม่มีชื่อ เนื่องจากประเภทnullไม่มีชื่อจึงไม่สามารถประกาศตัวแปรประเภทnullหรือแปลงเป็นประเภทnullได้ การnullอ้างอิงเป็นเพียงค่าที่เป็นไปได้ของการแสดงออกของประเภทnull การnullอ้างอิงสามารถส่งไปยังประเภทการอ้างอิงใด ๆ ได้เสมอ ในทางปฏิบัติโปรแกรมเมอร์สามารถละเว้นประเภทnullและเพียงแกล้งทำเป็นว่าnullเป็นตัวอักษรพิเศษที่สามารถเป็นประเภทอ้างอิงใด ๆ


ว่างเปล่าคืออะไร?

ตามที่อ้าง JLS ข้างต้นกล่าวว่าในทางปฏิบัติคุณสามารถแกล้งทำเป็นว่า "เป็นเพียงตัวอักษรพิเศษที่สามารถเป็นประเภทอ้างอิงใด ๆ "

ในชวา null == null (กรณีนี้ไม่ใช่ภาษาอื่นเสมอไป) โปรดทราบว่าตามสัญญาจะมีคุณสมบัติพิเศษนี้ (จากjava.lang.Object):

public boolean equals(Object obj)

สำหรับผู้ที่ไม่ใช่nullค่าอ้างอิงx, ควรx.equals(null)return false

เป็นค่าเริ่มต้น (สำหรับตัวแปรที่มี) สำหรับประเภทการอ้างอิงทั้งหมด:

JLS 4.12.5 ค่าเริ่มต้นของตัวแปร

  • ตัวแปรคลาสแต่ละตัวตัวแปรอินสแตนซ์หรือองค์ประกอบอาร์เรย์จะเริ่มต้นได้ด้วย ค่าเริ่มต้นเมื่อสร้าง:
    • nullเหมาะสำหรับทุกสภาพการอ้างอิงค่าเริ่มต้นคือ

วิธีการใช้สิ่งนี้แตกต่างกันไป คุณสามารถใช้มันเพื่อเปิดใช้งานสิ่งที่เรียกว่าเริ่มต้นขี้เกียจของฟิลด์nullจนกว่าจะใช้จริงซึ่งจะถูกแทนที่ด้วยค่า "จริง" (ซึ่งอาจมีราคาแพงในการคำนวณ)

นอกจากนี้ยังมีการใช้งานอื่น ๆ ลองตัวอย่างจากjava.lang.System:

public static Console console()

คืนค่า : คอนโซลระบบถ้ามีเป็นอย่างอื่นnullคอนโซลระบบถ้ามิฉะนั้น

นี่เป็นรูปแบบการใช้งานทั่วไป: nullใช้เพื่อแสดงถึงการไม่มีอยู่ของวัตถุ

นี่คืออีกตัวอย่างการใช้งานคราวนี้จากjava.io.BufferedReader:

public String readLine() throws IOException

คืนค่า : Stringเนื้อหาที่มีของบรรทัดไม่รวมถึงอักขระการยกเลิกบรรทัดหรือnullถ้าถึงจุดสิ้นสุดของสตรีม

ดังนั้นที่นี่readLine()จะกลับinstanceof Stringสำหรับแต่ละบรรทัดจนกระทั่งในที่สุดก็ส่งกลับnullเพื่อหมายถึงจุดสิ้นสุด สิ่งนี้ช่วยให้คุณสามารถประมวลผลแต่ละบรรทัดดังต่อไปนี้:

String line;
while ((line = reader.readLine()) != null) {
   process(line);
}

หนึ่งสามารถออกแบบ API เพื่อให้เงื่อนไขการเลิกจ้างไม่ได้ขึ้นอยู่กับการreadLine()ส่งคืนnullแต่จะเห็นได้ว่าการออกแบบนี้มีประโยชน์ในการทำให้สิ่งต่าง ๆ รัดกุม "" != nullโปรดทราบว่ามีปัญหาเกี่ยวกับเส้นที่ว่างเปล่าไม่เพราะบรรทัดว่าง

ลองมาดูตัวอย่างอื่นคราวนี้จากjava.util.Map<K,V>:

V get(Object key)

ส่งคืนค่าที่คีย์ที่ระบุถูกแมปหรือ nullหากแผนที่นี้ไม่มีการแมปสำหรับคีย์

หากแผนที่นี้อนุญาตให้ใช้nullค่าดังนั้นค่าส่งคืนของnullไม่จำเป็นต้องระบุว่าแผนที่ไม่มีการแมปสำหรับคีย์ nullก็ยังเป็นไปได้ว่าแผนที่อย่างชัดเจนแผนที่กุญแจสำคัญในการ การcontainsKeyดำเนินการอาจใช้เพื่อแยกความแตกต่างสองกรณีนี้

ที่นี่เราเริ่มเห็นว่าการใช้nullสามารถทำให้สิ่งต่าง ๆ ซับซ้อนได้อย่างไร คำสั่งแรกบอกว่าถ้าคีย์ไม่ได้แมปnullจะถูกส่งกลับ คำสั่งที่สองบอกว่าแม้ว่ากุญแจจะถูกแมปก็nullสามารถถูกส่งกลับ

ในทางตรงกันข้ามjava.util.Hashtableทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยไม่อนุญาตให้ใช้nullคีย์และค่า ของมันV get(Object key)ถ้าผลตอบแทนnull, ไม่น่าสงสัยหมายความว่าที่สำคัญคือไม่ได้แมป

คุณสามารถอ่านส่วนที่เหลือของ API และค้นหาตำแหน่งและวิธีการnullใช้งาน โปรดจำไว้ว่าพวกเขาไม่ได้เสมอแนวปฏิบัติที่ดีที่สุดตัวอย่างไป

โดยทั่วไปnullจะใช้เป็นค่าพิเศษในการสื่อความหมาย:

  • สถานะเริ่มต้น
  • เงื่อนไขการสิ้นสุด
  • วัตถุที่ไม่มีอยู่
  • ค่าที่ไม่รู้จัก

มันเป็นตัวแทนในหน่วยความจำได้อย่างไร?

ใน Java? ไม่มีความกังวลของคุณ และมันก็เป็นวิธีที่ดีที่สุด


คือ nullสิ่งที่ดีหรือไม่?

ตอนนี้เป็นเส้นเขตแดนแบบอัตนัย บางคนบอกว่าnullเป็นสาเหตุของข้อผิดพลาดของโปรแกรมเมอร์มากมายที่สามารถหลีกเลี่ยงได้ บางคนบอกว่าในภาษาที่จับNullPointerExceptionจาวาเหมือนกันมันก็ดีที่จะใช้เพราะคุณจะล้มเหลวอย่างรวดเร็วในข้อผิดพลาดของโปรแกรมเมอร์ บางคนหลีกเลี่ยงnullโดยใช้รูปแบบวัตถุ Nullเป็นต้น

นี่เป็นหัวข้อใหญ่ในตัวของมันเองดังนั้นจึงเป็นการสนทนาที่ดีที่สุดเพื่อตอบคำถามอื่น

ฉันจะจบเรื่องนี้ด้วยคำพูดจากนักประดิษฐ์ของnullตัวเองCAR Hoare (จากชื่อเสียงอันโด่งดัง):

ฉันเรียกมันว่าผิดพันล้านดอลลาร์ มันเป็นสิ่งประดิษฐ์ของการnullอ้างอิงในปี 1965 ในเวลานั้นฉันกำลังออกแบบระบบชนิดที่ครอบคลุมแรกสำหรับการอ้างอิงในภาษาเชิงวัตถุ (ALGOL W) เป้าหมายของฉันคือเพื่อให้แน่ใจว่าการใช้การอ้างอิงทั้งหมดควรจะปลอดภัยอย่างยิ่งโดยการตรวจสอบดำเนินการโดยอัตโนมัติโดยคอมไพเลอร์ แต่ฉันไม่สามารถต้านทานสิ่งล่อใจที่จะใส่ในการnullอ้างอิงเพียงเพราะมันง่ายที่จะใช้ สิ่งนี้นำไปสู่ข้อผิดพลาดมากมายช่องโหว่และระบบล่มซึ่งอาจทำให้เกิดความเจ็บปวดและความเสียหายนับพันล้านดอลลาร์ในช่วงสี่สิบปีที่ผ่านมา

วิดีโอนำเสนอนี้ไปลึก; มันเป็นนาฬิกาที่แนะนำ


4
การอ้างอิงแบบ Null มีอยู่ใน LISP (เหมือนNIL) ในปี 1960 และอาจเร็วกว่านี้ แต่ผมไม่คิดว่าโฮร์เป็นจริงๆพยายามที่จะเรียกร้องสิ่งประดิษฐ์ของการอ้างอิงโมฆะในอ้างว่า
สตีเฟ่นซี

7
Hoare ไม่พยายามอ้างสิทธิ์ในการประดิษฐ์สิ่งอ้างอิงโมฆะ; เขาเพียงแค่อ้างว่าเขาทำให้พวกเขามีอยู่ในสถานที่ที่มีอิทธิพลอย่างยิ่ง มีหลายภาษารวมถึง Java ที่ได้รับแรงบันดาลใจจาก Algol อย่างชัดเจนและหากการใช้การอ้างอิงแบบ null เป็นส่วนหนึ่งที่ได้รับแรงบันดาลใจจากหรือคัดลอกมาจาก Algol Hoare นั้นถูกต้องในการตำหนิบางอย่างสำหรับค่าใช้จ่ายเหล่านี้ อย่างไรก็ตามฉันรู้สึกว่าประมาณการของเขาค่อนข้างต่ำ ล้านล้านดอลลาร์อาจใกล้เคียงกับต้นทุนที่แท้จริง
cjs

32

โมฆะเป็นตัวอย่างของอะไร?

เลขที่นั่นคือเหตุผลที่null instanceof Xจะกลับมาสำหรับทุกชั้นfalse X(อย่าหลงกลโดยความจริงที่ว่าคุณสามารถกำหนดให้nullกับตัวแปรที่มีประเภทเป็นประเภทวัตถุได้พูดอย่างเคร่งครัดการมอบหมายนั้นเกี่ยวข้องกับการแปลงประเภทโดยนัย; ดูด้านล่าง)

ชุด 'null' เป็นของอะไร

มันเป็นสมาชิกหนึ่งเดียวเท่านั้นของประเภท null ที่กำหนดประเภท null ดังนี้:

"นอกจากนี้ยังมีชนิด null พิเศษชนิดของนิพจน์ null ซึ่งไม่มีชื่อเนื่องจากประเภท null ไม่มีชื่อจึงไม่สามารถประกาศตัวแปรประเภท null หรือส่งเป็นประเภท null ได้ null การอ้างอิงเป็นเพียงค่าที่เป็นไปได้ของการแสดงออกของประเภทโมฆะการอ้างอิงที่เป็นโมฆะสามารถนำไปใช้กับประเภทการอ้างอิงใด ๆ ได้ในทางปฏิบัติโปรแกรมเมอร์สามารถเพิกเฉยต่อชนิดของโมฆะและแกล้งทำเป็นว่า ประเภทอ้างอิง " JLS 4.1

ว่างเปล่าคืออะไร?

ดูด้านบน. ในบริบทบางอย่างnullใช้เพื่อแสดงว่า "ไม่มีวัตถุ" หรือ "ไม่รู้จัก" หรือ "ไม่พร้อมใช้งาน" แต่ความหมายเหล่านี้เป็นแอปพลิเคชันเฉพาะ

มันเป็นตัวแทนในหน่วยความจำได้อย่างไร?

นั่นคือการใช้งานเฉพาะและคุณจะไม่สามารถเห็นการเป็นตัวแทนnullในโปรแกรมจาวาบริสุทธิ์ (แต่nullจะแสดงเป็นเครื่องที่อยู่ / ตัวชี้ศูนย์ในที่สุดถ้าไม่ใช่การใช้งานจาวาทั้งหมด)


14

ว่างเปล่าคืออะไร?

มันไม่มีอะไร.

โมฆะเป็นตัวอย่างของอะไร?

ไม่เป็นไม่มีอะไรมันไม่สามารถเป็นตัวอย่างของสิ่งใดได้

ชุดใดเป็นโมฆะเป็นของ?

ไม่มีชุดใด ๆ

มันเป็นตัวแทนในหน่วยความจำได้อย่างไร?

หากมีการอ้างอิงชี้ไปที่:

Object o=new Object();

ในหน่วยความจำฮีปพื้นที่ที่กำหนดให้กับวัตถุที่สร้างขึ้นใหม่ และ o จะชี้ไปที่พื้นที่ที่กำหนดในหน่วยความจำ

ตอนนี้ o=null;

ซึ่งหมายความว่าตอนนี้ o จะไม่ชี้ไปยังพื้นที่หน่วยความจำของวัตถุนั้น


1
"ตอนนี้ o = null; ซึ่งหมายความว่าตอนนี้ o จะไม่ชี้ไปยังพื้นที่หน่วยความจำของวัตถุนั้น" ฉันคิดว่านี่เป็นวิธีที่ Garbage Collection ทำงานใน JAVA
Hardik Mishra

9

ไม่มันไม่ใช่อินสแตนซ์ของอะไรเลยอินสแตนซ์ของมันจะเป็นเท็จเสมอ


7

คำสำคัญที่เป็นโมฆะเป็นตัวอักษรที่หมายถึงการอ้างอิงเป็นโมฆะซึ่งไม่ได้อ้างอิงถึงวัตถุใด ๆหนึ่งที่ไม่ได้หมายถึงวัตถุใดnull เป็นค่าเริ่มต้นของตัวแปรประเภทการอ้างอิง

อาจจะดู

null: Java อภิธานศัพท์


2
มันไม่ได้เป็นคำหลักที่มันเป็นตัวอักษร คุณภาพไม่ดีและการอ้างอิงที่ไม่เป็นบรรทัดฐาน
มาร์ควิสแห่ง Lorne

6

Null ไม่ใช่ตัวอย่างของคลาสใด ๆ

อย่างไรก็ตามคุณสามารถกำหนดค่า Null ให้กับตัวแปรประเภทใด ๆ (วัตถุหรืออาร์เรย์):

 // this is false   
 boolean nope = (null instanceof String);

 // but you can still use it as a String
 String x = null;
 "abc".startsWith(null);

6

Null ใน Java (tm)

ใน C และ C ++ "NULL" เป็นค่าคงที่ที่กำหนดในไฟล์ส่วนหัวโดยมีค่าดังนี้:

    0

หรือ:

    0L

หรือ:

    ((void*)0)

ขึ้นอยู่กับตัวเลือกรูปแบบคอมไพเลอร์และหน่วยความจำ NULL ไม่ได้พูดอย่างเคร่งครัดส่วนหนึ่งของ C / C ++ เอง

ใน Java (tm) "null" ไม่ใช่คำหลัก แต่เป็นตัวอักษรพิเศษของประเภท null มันสามารถส่งไปยังประเภทการอ้างอิงใด ๆ แต่ไม่สามารถพิมพ์แบบดั้งเดิมใด ๆ เช่น int หรือบูลีน ตัวอักษร null ไม่จำเป็นต้องมีค่าเป็นศูนย์ และมันเป็นไปไม่ได้ที่จะส่งไปเป็นโมฆะหรือประกาศตัวแปรประเภทนี้


5

การเป็นตัวแทน Bytecode

Java's nullมีการสนับสนุน JVM โดยตรง: สามคำสั่งถูกใช้เพื่อนำไปใช้งาน:

  • aconst_null: เช่นการตั้งค่าตัวแปรnullเป็นในObject o = null;
  • ifnullและifnonnull: เช่นเพื่อเปรียบเทียบวัตถุกับnullในif (o == null)

บทที่ 6 "ชุดคำสั่ง Java Virtual Machine"แล้วกล่าวถึงผลกระทบของnullคำแนะนำอื่น ๆ : มันส่งผลNullPointerExceptionต่อหลาย ๆ อย่าง

2.4 "ประเภทและค่าอ้างอิง"ยังกล่าวถึงnullในแง่ทั่วไป:

ค่าอ้างอิงอาจเป็นการอ้างอิงโมฆะพิเศษการอ้างอิงถึงไม่มีวัตถุซึ่งจะแสดงเป็นโมฆะที่นี่ การอ้างอิงโมฆะในตอนแรกไม่มีประเภทของเวลาทำงาน แต่อาจถูกแปลงไปเป็นประเภทใดก็ได้ ค่าเริ่มต้นของประเภทการอ้างอิงเป็นโมฆะ


4

nullเป็นค่าพิเศษมันไม่ใช่ตัวอย่างของอะไรเลย ด้วยเหตุผลที่ชัดเจนมันไม่สามารถเป็นinstanceofอะไรได้


3

nullเป็นค่าพิเศษที่ไม่ได้เป็นตัวอย่างของคลาสใด ๆ นี่คือตัวอย่างของโปรแกรมต่อไปนี้:

public class X {
   void f(Object o)
   { 
      System.out.println(o instanceof String);   // Output is "false"
   }
   public static void main(String[] args) {
      new X().f(null);
   }
}

6
สิ่งเดียวที่เป็นตัวอย่างที่แสดงให้เห็นว่าไม่ได้เป็นตัวอย่างของnull String
Sasha Chedygov

4
หากคุณเปลี่ยนลายเซ็นเป็นvoid f(String o)มันจะสมเหตุสมผลมากกว่า
Thilo

2

null ใน Java เหมือนกับ / คล้ายกับ nullptr ใน C ++

โปรแกรมใน C ++:

class Point
{
    private:
       int x;
       int y;
    public:
       Point(int ix, int iy)
       {
           x = ix;
           y = iy;
       }
       void print() { std::cout << '(' << x << ',' << y << ')'; }
};
int main()
{
    Point* p = new Point(3,5);
    if (p != nullptr)
    {
       p->print();
       p = nullptr;
    }
    else
    {
        std::cout << "p is null" << std::endl;
    }
    return 0;
}

โปรแกรมเดียวกันใน Java:

public class Point {
    private int x;
    private int y;
    public Point(int ix, int iy) {
        x = ix;
        y = iy;
    }
    public void print() { System.out.print("(" + x + "," + y + ")"); }
}
class Program
{
    public static void main(String[] args) {
        Point p = new Point(3,5);
        if (p != null)
        {
            p.print();
            p = null;
        }
        else
        {
            System.out.println("p is null");
        }
    }
}

ตอนนี้คุณเข้าใจจากโค้ดข้างต้นว่าเป็นโมฆะใน Java คืออะไร? ถ้าไม่ใช่ฉันขอแนะนำให้คุณเรียนรู้พอยน์เตอร์ใน C / C ++ แล้วคุณจะเข้าใจ

โปรดทราบว่าใน C ซึ่งแตกต่างจาก C ++ นั้น nullptr นั้นไม่ได้ถูกกำหนด แต่จะใช้ NULL แทนซึ่งสามารถใช้ใน C ++ ด้วยเช่นกัน แต่ใน C ++ nullptr นั้นจะดีกว่า NULL มากกว่าเพราะ NULL ใน C นั้นเกี่ยวข้องกับพอยน์เตอร์เสมอ มันดังนั้นใน C ++ คำต่อท้าย "ptr" จึงถูกต่อท้ายคำและตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก แต่ตอนนี้มีความสำคัญน้อยกว่า

ใน Java ตัวแปรทุกประเภทของคลาสที่ไม่ใช่แบบดั้งเดิมมักจะอ้างอิงถึงวัตถุประเภทนั้นหรือที่สืบทอดมาและ null คือการอ้างอิงวัตถุคลาส null แต่ไม่ใช่ตัวชี้โมฆะเพราะใน Java ไม่มีสิ่งใดที่ "ตัวชี้" แต่อ้างอิงถึงคลาส วัตถุถูกนำมาใช้แทนและ null ใน Java เกี่ยวข้องกับการอ้างอิงวัตถุคลาสดังนั้นคุณสามารถเรียกมันว่า "nullref" หรือ "nullrefobj" แต่นี่ยาวมากดังนั้นจึงเรียกมันว่า "null"

ใน C ++ คุณสามารถใช้พอยน์เตอร์และค่า nullptr สำหรับสมาชิก / ตัวแปรทางเลือกเช่นสมาชิก / ตัวแปรที่ไม่มีค่าและถ้ามันไม่มีค่าดังนั้นมันจะเท่ากับ nullptr ดังนั้นจึงสามารถใช้ null ใน Java ได้


1

มีสองประเภทหลักของประเภทที่อยู่ใน Java: ดั้งเดิมและการอ้างอิง ตัวแปรที่ประกาศถึงค่าที่เก็บประเภทดั้งเดิม ตัวแปรที่ประกาศของการอ้างอิงที่เก็บชนิดการอ้างอิง

String x = null;

ในกรณีนี้คำสั่งเริ่มต้นประกาศตัวแปร“ x” “ x” เก็บการอ้างอิงสตริง มันเป็นโมฆะที่นี่ ก่อนอื่น null ไม่ใช่อินสแตนซ์ของวัตถุที่ถูกต้องดังนั้นจึงไม่มีการจัดสรรหน่วยความจำ เป็นเพียงค่าที่ระบุว่าการอ้างอิงวัตถุไม่ได้อ้างอิงถึงวัตถุในขณะนี้


0

วิธีที่น่าสนใจที่จะเห็น null ใน java ในความคิดของฉันคือการมองว่ามันเป็นสิ่งที่ไม่ได้หมายถึงการขาดข้อมูล แต่เพียงแค่เป็นค่าตามตัวอักษรที่สามารถกำหนดให้อ้างอิงประเภทใดก็ได้ ถ้าคุณคิดเกี่ยวกับมันถ้ามันแสดงว่าไม่มีข้อมูลดังนั้น a1 == a2 จะเป็นจริงไม่สมเหตุสมผล (ในกรณีที่พวกเขาทั้งคู่ได้รับค่าว่าง) เพราะพวกเขาสามารถชี้ไปที่วัตถุใด ๆ (เราเพียงแค่ ไม่ทราบว่าวัตถุควรชี้ไปที่ใด) ... โดยวิธี null == null จะส่งกลับค่าจริงใน java ถ้า java เช่นจะเหมือนกับ SQL: 1999 แล้ว null == null จะส่งคืนค่าที่ไม่รู้จัก (ค่าบูลีนใน SQL: 1999 สามารถใช้ค่าสามค่า: จริง, เท็จและไม่รู้จัก แต่ในทางปฏิบัติที่ไม่รู้จักถูกนำมาใช้เป็น null ในระบบจริง) ... http://en.wikipedia.org/wiki/SQL


0

คำตอบสั้น ๆ และแม่นยำที่ตอบคำถามของคุณอย่างเป็นทางการจาก JLS:

3.10.7 ตัวอักษร Null

ชนิด null มีหนึ่งค่าการอ้างอิงค่า null แสดงด้วยค่า null ตามตัวอักษร null ซึ่งเกิดขึ้นจากอักขระ ASCII

ตัวอักษร null เป็นประเภท null เสมอ

มีการจัดสรรการอ้างอิงประเภทที่กำหนดให้เป็นโมฆะเท่านั้น คุณไม่ได้กำหนดค่าใด ๆ (วัตถุ) ให้กับการอ้างอิง การจัดสรรดังกล่าวมีความเฉพาะเจาะจงกับ JVM จะใช้การอ้างอิงจำนวนเท่าใดและพื้นที่หน่วยความจำใดที่จะถูกจัดสรร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.