对于原始数据types为空
当声明任何基本types数据如int
或double
它们被初始化为0
或0.0
。 为什么我们不能将它们设置为null
?
原始types只是数据。 另一方面,我们所说的对象只是指向数据存储位置的指针。 例如:
Integer object = new Integer(3); int number = 3;
在这种情况下, object
只是一个指向Integer对象的指针,它的值恰好是3.也就是说,在存储variables对象的内存位置,所有数据都是对数据真实位置的引用。 另一方面,存储number
的存储位置直接包含值3。
所以,你可以设置object
为null,但这只是表示该对象的数据是空的(即,没有分配)。 您不能将int设置为null,因为语言会将其解释为值0。
希望有所帮助!
因为null是一个引用。 原始types不是引用types。 只有对象是引用types。
因为Java中的原始数据types不是Object
。 您始终可以使用其中一个包装类来获得一个Object
。 八种基本数据types中的每一种都有其对应的包装器:
- byte:
java.lang.Byte
- 简而言之:
java.lang.Short
- int:
java.lang.Integer
- long:
java.lang.Long
- float:
java.lang.Float
- double:
java.lang.Double
- 布尔值:
java.lang.Boolean
- char
java.lang.Character
如果你对整个结构感兴趣,你可以从这里开始(原始数据types) 。
因为这就是语言标准所说的。
如果你想能够传递null
,你应该使用包装types ,例如Integer
而不是int
。
因为它是一个原始types,而不是一个对象。 如果您需要使用空值的能力,您可以为每个types使用相应的对象(例如Double为double,Long为long,boolean为布尔值等)
Java编程语言是静态types的,这意味着所有variables必须先声明才能使用。 这涉及到说明variables的types和名称。
除了上面所有的答案,我还想补充一点。
对于原始types,我们有固定的内存大小,即对于int我们有4个字节和字符我们有2个字节。 而null仅用于对象,因为内存大小不固定。
所以默认情况下,
int a=0;
并不是
int a=null;
与其他基本types相同,因此null仅用于对象而不用于基元types。
首先,Primitive和Object Reference的区别是Primitivevariables存储的是实际的值,而Object引用variables存储它们引用的对象的地址,在这种情况下,在对象引用中,如果没有地址,它会传递给“空值”。
原始数据types的默认值取决于原始数据types:像byte = 0,short = 0,int = 0,long = 0L,float = 0.0f,double = 0.0d,boolean = false,char =“\ u0000” 。
当我们声明任何类types的variables时,它被称为参考数据types。
EX:
testingt1
testingt2
(对象包装types)
Integer i
长龙
对象引用缺省值,Jvm将引用variables初始化为“null”,并将数组初始化为“null”
对象涉及比基元更多的开销。 下面的testing显示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不具有可空的原语。