当声明像任何基本类型数据int
或double
他们得到初始化为0
或0.0
。 我们为什么不能将它们设置为null
?
Answer 1:
原语类型只是数据。 我们所说的对象,而另一方面,仅会指向数据的存储位置。 例如:
Integer object = new Integer(3);
int number = 3;
在这种情况下, object
只是一个指向整数对象,其值正好是3。也就是,在其中变量对象存储在内存中的位置,你已经是到数据真的是一个参考。 其中存储器位置number
被存储,另一方面,包含直接的值3。
所以,你可以设置object
为null,但是这也只是意味着该对象的数据为空(即,未分配)。 你不能设置一个int为null,因为语言将其解释是为值0。
希望帮助!
Answer 2:
因为空是一个参考。 和原始类型不是引用类型。 只有对象是引用类型。
Answer 3:
由于Java原始数据类型没有Object
秒。 您可以随时使用的包装类之一,有一个Object
。 每八个基本数据类型都有其相应的包装:
- 字节:
java.lang.Byte
- 短期:
java.lang.Short
- INT:
java.lang.Integer
- 长:
java.lang.Long
- 浮动:
java.lang.Float
- 双:
java.lang.Double
- 布尔值:
java.lang.Boolean
- 焦炭
java.lang.Character
如果你有兴趣在整个结构中,你就可以开始在这里(基本数据类型) 。
Answer 4:
因为这是语言标准说什么。
如果您希望能够通过null
,你应该使用的包装类型 ,例如Integer
,而不是int
。
Answer 5:
因为它是一个原始类型,而不是一个对象。 您可以使用相应的对象为每种类型的,如果你需要使用空值(即双双,龙长,布尔布尔等)的能力
Answer 6:
对象涉及比原语更多的开销。 下面的测试表明INT进行约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不为空的原语。
Answer 7:
除了以上所有的答案我想太补充这一点。
基本类型,我们已经固定存储器大小即对于int我们有4个字节和CHAR我们有2个字节。 而空只用于对象,因为内存的大小是不固定的。
因此,在默认情况下,我们有,
int a=0;
并不是
int a=null;
同样与其它原始类型,因此空仅用于对象而不是用于原始类型。
Answer 8:
首先,本原,差异对象引用原始变量中存储的实际值,而对象引用变量店,他们是指,在这种情况下对象的引用,如果没有地址,它会通过对象的地址为“空值”。
原始数据类型的默认值依赖于原始数据类型:像字节= 0,短= 0,INT = 0,长= 0L,浮子= 0.0F,双= 0.0D,布尔= FALSE,焦炭= “\ u0000的” 。
当我们声明任何类类型的的变量,它是已知的作为基准数据的类型。
EX:
测试T1
测试T2
(对象包装类型)
整数i
龙升
对象引用的默认值时,jvm初始化参考变量为“空”并且还将初始化数组为“空”