簡體   English   中英

為什么原始數據類型在Java中不能為“null”?

[英]Why can't primitive data types be “null” in Java?

當聲明任何基本類型數據(如intdouble它們會初始化為00.0 為什么我們不能將它們設置為null

原始類型只是數據。 另一方面,我們稱之為對象的只是指向數據存儲位置的指針。 例如:

Integer object = new Integer(3);
int number = 3;

在這種情況下, object只是一個指向Integer對象的指針,該對象的值恰好是3.也就是說,在存儲變量對象的內存位置,您所擁有的只是對數據實際位置的引用。 另一方面,存儲number的存儲位置直接包含值3。

因此,您可以將object設置為null,但這只是意味着該對象的數據為null(即未分配)。 您不能將int設置為null,因為該語言會將其解釋為值0。

希望有所幫助!

因為null是一個引用。 原始類型不是引用類型。 只有對象是引用類型。

因為Java中的原始數據類型不是Object 您始終可以使用其中一個包裝類來擁有Object 八種原始數據類型中的每一種都有其相應的包裝器:

  • byte: java.lang.Byte
  • short: java.lang.Short
  • int: java.lang.Integer
  • long: java.lang.Long
  • float: java.lang.Float
  • double: java.lang.Double
  • boolean: java.lang.Boolean
  • char java.lang.Character

如果您對整個結構感興趣,可以從這里開始(原始數據類型)

因為這就是語言標准所說的。

如果您希望能夠傳遞null ,則應使用包裝器類型 ,例如Integer而不是int

因為它是原始類型而不是對象。 如果需要能夠使用空值,則可以為每種類型使用相應的對象(即Double為double,Long為long,Boolean為布爾值等)

對象涉及比基元更多的開銷。 以下測試顯示int的執行速度比Integer快10倍。

int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
    Integer t = 0;
    t = 10;
    t = 11;
}

point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
    int t = 0;
    t = 10;
    t = 11;
}
point.collect();

etmMonitor.render(new SimpleTextRenderer());

這就是為什么.net實現了可以為空的原語,遺憾的是java沒有可空的原語。

除了以上所有答案,我還想補充這一點。

對於原始類型,我們有固定的內存大小,即對於int,我們有4個字節,char我們有2個字節。 並且null僅用於對象,因為內存大小不固定。

所以默認我們有,

   int a=0;

並不是

   int a=null;

與其他基本類型相同,因此null僅用於對象而不用於基本類型。

首先,Primitive和Object Reference的區別在於Primitive變量存儲實際值,而對象引用變量存儲它們引用的對象的地址,在這種情況下在對象引用中如果沒有地址則傳遞給“空值”。

原始數據類型的默認值取決於原始數據類型:如byte = 0,short = 0,int = 0,long = 0L,float = 0.0f,double = 0.0d,boolean = false,char =“\\ u0000” 。

當我們聲明任何類類型的變量時,它被稱為引用數據類型。

EX:

測試t1

測試t2

(對象包裝類型)

整數我

長l

對象引用默認值,Jvm將引用變量初始化為“null”,並且還將數組初始化為“null”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM