可以的int是null在Java中?
例如:
int data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
Run Code Online (Sandbox Code Playgroud)
我的目标是编写一个返回一个函数int.表示int存储在节点的高度,如果节点不存在,它将为null,我需要检查它.
我这样做是为了完成家庭作业,但这个特定的部分不是作业的一部分,它只是帮助我完成我正在做的事情.
感谢您的评论,但似乎很少有人真正阅读过代码下的内容,我在问我还能如何实现这一目标; 很容易弄清楚它不起作用.
Bri*_*new 187
int 不能为null,但Integer 可以.拆箱null整数时你需要小心,因为这会导致很多混乱和头部刮伤!
例如:
int a = object.getA(); // getA returns a null Integer
Run Code Online (Sandbox Code Playgroud)
会给你一个NullPointerException,尽管对象不是空的!
要跟进你的问题,如果你想表明没有值,我会调查java.util.Optional<Integer>
Mat*_*ngo 30
一个很好的方法来找出:
public static void main(String args[]) {
int i = null;
}
Run Code Online (Sandbox Code Playgroud)
尝试编译.
Jon*_*ust 13
在Java中,int是基本类型,它不被视为对象.只有对象可以具有空值.所以你的问题的答案是否定的,它不能为空.但事情并非那么简单,因为有些对象代表了最原始的类型.
Integer类表示一个int值,但它可以保存一个null值.根据您的check方法,您可能返回int或Integer.
这种行为不同于一些更纯粹的面向对象的语言,比如Ruby,甚至像int这样的"原始"东西也被认为是对象.
除了以上所有答案,我还想补充这一点.
对于原始类型,我们有固定的内存大小,即对于int,我们有4个字节,char我们有2个字节.并且null仅用于对象,因为内存大小不固定.
所以默认我们有,
int a=0;
Run Code Online (Sandbox Code Playgroud)
并不是
int a=null;
Run Code Online (Sandbox Code Playgroud)
与其他基本类型相同,因此null仅用于对象而不用于基本类型.
代码甚至不会编译.只有一个fullworthy Object可以null像Integer.这是一个显示何时可以测试null的基本示例:
Integer data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果check()声明返回int,它永远不会是null,整个if-else块是多余的.
int data = check(Node root);
// do something
Run Code Online (Sandbox Code Playgroud)
当check()声明返回时,自动装箱问题也不适用于此处int.如果它已经返回Integer,那么NullPointerException在将其分配给int而不是时,您可能会冒险Integer.然后将其分配为Integer并使用该if-else块确实是强制性的.
要了解有关自动装箱的更多信息,请查看此Sun指南.
小智 5
而不是int i像Integer i我们可以做的那样声明为i=null;
Integer i;
i=null;
Run Code Online (Sandbox Code Playgroud)