Java中int
可以null
吗?
例如:
int data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
我的目标是编写一个返回int
的函数。所述int
存储在节点的高度,如果该节点不存在,则它将为null,我需要检查它。
我这样做是为了完成家庭作业,但这个特定的部分不是作业的一部分,它只是帮助我完成我正在做的事情。
感谢您的评论,但似乎很少有人真正阅读过代码下的内容,我在问我怎样才能实现这一目标;很容易弄清楚它不起作用。
答案 0 :(得分:174)
int
不能为空,但Integer
可以。拆箱null整数时你需要小心,因为这会导致很多混乱和头部刮伤!
e.g。这样:
int a = object.getA(); // getA returns a null Integer
会给你一个NullPointerException
,尽管对象不是空的!
要跟进您的问题,如果您想表明某个值的缺席,我会调查java.util.Optional<Integer>
答案 1 :(得分:36)
没有。只有对象引用可以为null,而不是基元。
答案 2 :(得分:26)
找出答案的好方法:
public static void main(String args[]) {
int i = null;
}
尝试编译。
答案 3 :(得分:11)
在Java中,int是基本类型,它不被视为对象。只有对象可以具有空值。所以你的问题的答案是否定的,它不能为空。但事情并非如此简单,因为有些对象代表了最原始的类型。
Integer类表示一个int值,但它可以保存一个null值。根据您的check
方法,您可能会返回int或Integer。
这种行为不同于一些更纯粹的面向对象的语言,比如Ruby,甚至像int这样的“原始”东西都被认为是对象。
答案 4 :(得分:8)
除了以上所有答案,我还想补充这一点。
对于原始类型,我们有固定的内存大小,即对于int,我们有4个字节,char我们有2个字节。并且null仅用于对象,因为内存大小不固定。
所以默认我们有,
int a=0;
而不是
int a=null;
与其他原始类型相同,因此null仅用于对象而不用于基本类型。
答案 5 :(得分:5)
代码甚至不会编译。只有符合条件的Object
可以是null
,例如Integer
。这是一个显示何时可以测试null的基本示例:
Integer data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
另一方面,如果声明check()
返回int
,则永远不会成为null
且整个if-else
块是然后是多余的。
int data = check(Node root);
// do something
当声明check()
返回int
时,自动装箱问题也不适用于此处。如果它已返回Integer
,那么在将其分配给NullPointerException
而不是int
时,您可能会冒Integer
的风险。将其指定为Integer
并使用if-else
块确实是强制性的。
要了解有关自动装箱的详情,请查看this Sun guide。
答案 6 :(得分:3)
代替声明为int i
而不声明为Integer i
,我们可以做i=null;
Integer i;
i=null;
答案 7 :(得分:2)
整数对象最好。如果必须使用原语,则可以使用用例中不存在的值。人们不存在负高度,所以
public int getHeight(String name){
if(map.containsKey(name)){
return map.get(name);
}else{
return -1;
}
}
答案 8 :(得分:1)
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
答案 9 :(得分:0)
正如@Glen在评论中提到的,你基本上有两种解决方法:
答案 10 :(得分:0)
检查check()方法中的null并返回无效值(如-1)或零(如果为null)。然后检查将是该值而不是传递null。在过去的'C'中,这是正常的事情。
答案 11 :(得分:0)
任何原始数据类型(例如int,boolean或float等)都不能存储null(侧面),因为Java提供了Wrapper类用于将int存储为Integer,将布尔值存储为Boolean。
例如:Integer i = null;
答案 12 :(得分:0)
int不为null,如果未初始化,则可能为0。如果希望整数可以为null,则需要使用Integer而不是int。原语不具有空值。默认的int值为0。
数据类型/默认值(用于字段)
int ------------------ 0
长---------------- 0升
float ---------------- 0.0f
double ------------- 0.0d
字符---------------'\ u0000'
字符串--------------- null
布尔值------------否
答案 13 :(得分:-2)
由于您要求另一种方法来实现目标,我建议您使用包装类:
new Integer(null);
答案 14 :(得分:-16)
我不是专家,但我相信int的null
等价物是0
。
例如,如果您制作int[]
,则每个广告位都包含0
而不是null
,除非您将其设置为其他广告位。
在某些情况下,这可能有用。