没有原始数据类型为什么是“空”在Java中?没有原始数据类型为什么是“空”在Java中?(Why c

2019-06-17 10:36发布

当声明像任何基本类型数据intdouble他们得到初始化为00.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初始化参考变量为“空”并且还将初始化数组为“空”



文章来源: Why can't primitive data types be “null” in Java?