Can an int be null in Java?
Java中的
例如:
1 2 3 4 5 6 7 | int data = check(Node root); if ( data == null ) { // do something } else { // do something } |
我的目标是编写一个返回
我是在做家庭作业的,但是这部分内容不是家庭作业的一部分,它只是帮助我完成自己的工作。
感谢您的评论,但是似乎很少有人真正阅读过代码下的内容,我在问我如何才能实现这一目标; 很容易发现它不起作用。
例如这个:
1 | int a = object.getA(); // getA returns a null Integer |
即使对象不为null也会给您
为了跟进您的问题,如果您想表明没有值,我将调查
否。只有对象引用可以为null,而不能为原语。
找出答案的好方法:
1 2 3 |
尝试编译。
在Java中,int是原始类型,因此不视为对象。只有对象可以具有空值。因此,您的问题的答案是否定的,不能为空。但这不是那么简单,因为有些对象代表大多数原始类型。
Integer类表示一个int值,但可以包含一个空值。根据您的
这种行为与诸如Ruby之类的更纯粹面向对象的语言不同,在Ruby中,甚至"整数"之类的"原始"事物也被视为对象。
除了以上所有答案外,我也想补充一点。
对于基本类型,我们具有固定的内存大小,即对于int我们有4个字节,而char我们有2个字节。并且null仅用于对象,因为内存大小不固定。
因此,默认情况下,
1 | int a=0; |
并不是
1 | int a=null; |
与其他原始类型相同,因此null仅用于对象,而不用于原始类型。
该代码甚至不会编译。像
1 2 3 4 5 6 7 |
另一方面,如果声明
1 2 3 | int data = check(Node root); // do something |
当声明
要了解有关自动装箱的更多信息,请查看此Sun指南。
而不是将其声明为
1 2 |
整数对象将是最好的。如果必须使用原语,则可以使用用例中不存在的值。人们不存在负高,所以
1 2 3 4 5 6 7 | public int getHeight(String name){ if(map.containsKey(name)){ return map.get(name); }else{ return -1; } } |
不可以,但是int []可以。
1 2 3 4 | int[] hayhay = null; //: allowed (int[] is reference type) int hayno = null; //: error (int is primitive type) //: Message: incompatible types: //: <null> cannot be converted to int |
任何原始数据类型(如int,boolean或float等)都不能存储null(侧向),因为Java提供了Wrapper类用于将相同的数据存储为int到Integer或boolean到Boolean。
例如:整数i = null;
在您的check()方法中检查null,并返回一个无效值,例如-1或如果为null则返回零。然后检查将针对该值,而不是传递null。这在过去的" C"中是正常的。
正如@Glen在评论中提到的那样,您基本上可以通过两种方式解决此问题:
- 使用"超出范围"值。例如,如果"数据"在正常使用中永远不会为负,则返回负值以表明它无效。
- 使用整数。只要确保" check"方法返回一个Integer,然后将其分配给Integer而不是int。因为如果在此过程中涉及" int",则自动装箱和拆箱会导致问题。
由于您要求实现目标的另一种方法,因此建议您使用包装器类:
1 |
我不是专家,但我确实认为int的
例如,如果创建一个
在某些情况下,这可能有用。