Java 在自动装箱中,转换是基于我们分配给的变量/引用,还是基于其他方式?
我在第Java 在自动装箱中,转换是基于我们分配给的变量/引用,还是基于其他方式?,java,autoboxing,Java,Autoboxing,我在第j=I行得到一个空指针异常 虽然如果将此行转换为i=ji,则输出为0,这是int的默认值。 我的问题是,当i被分配给j时,不应该将i作为一个int变量解除绑定,并使用默认值0而不是其原始默认值null吗?因为在原语中没有与null等价的值。当您尝试将i即null取消绑定到基元j时,这将是一个空点异常,因为i为null。取消装箱null总是引发NullPointerException。这是根据 如果r为null,取消装箱转换将抛出NullPointerException 因为在原语中没有等价
j=I
行得到一个空指针异常虽然如果将此行转换为
i=j
i,则输出为0
,这是int的默认值。我的问题是,当
i
被分配给j
时,不应该将i
作为一个int变量解除绑定,并使用默认值0而不是其原始默认值null吗?因为在原语中没有与null
等价的值。当您尝试将i
即null
取消绑定到基元j
时,这将是一个空点异常,因为i
为null
。取消装箱null
总是引发NullPointerException。这是根据
如果r为null,取消装箱转换将抛出NullPointerException
因为在原语中没有等价的
null
。当您尝试将i
即null
取消绑定到基元j
时,这将是一个空点异常,因为i
为null
。取消装箱null
总是引发NullPointerException。这是根据
如果r为null,取消装箱转换将抛出NullPointerException
您从未初始化过
i
,然后i
为null
,无法对其进行拆箱。您从未初始化过i
,然后i
为null
,无法对其进行拆箱。来源:
在运行时,取消装箱转换按如下方式进行:
- 如果r为null,取消装箱转换将抛出NullPointerException
i
(一个整数
),然后再尝试从以下位置将其分配给原语:
在运行时,取消装箱转换按如下方式进行:
- 如果r为null,取消装箱转换将抛出NullPointerException
为了避免NPE,您需要先初始化
i
(一个整数
),然后再尝试将其分配给一个原语
public class TestBox {
Integer i;
int j;
public static void main (String[] args) {
TestBox t = new TestBox();
t.go();
}
public void go() {
j = i;
System.out.println(j);
System.out.println(i);
}
}
您的整数i未初始化。如果您使用eclipse,它将显示一个错误用一些值初始化i,如
public class TestBox {
Integer i;
int j;
public static void main (String[] args) {
TestBox t = new TestBox();
t.go();
}
public void go() {
j = i;
System.out.println(j);
System.out.println(i);
}
}
您的整数i未初始化。如果使用将显示错误的eclipse,编译器将翻译此赋值
Integer i = someValue;
。。。为此:
j = i;
如果
i
为空,则得到NPE。编译器将翻译此赋值
Integer i = someValue;
。。。为此:
j = i;
如果
i
为空,则得到NPE。零被定义为基本整数实例变量的默认值,这是唯一应用此默认值的上下文。假设空整数值为零是非常不安全的。聪明的是,Java设计人员并没有这样定义它 0被定义为基本整数实例变量的默认值,这是唯一应用此默认值的上下文。假设空整数值为零是非常不安全的。聪明的是,Java设计人员并没有这样定义它 Argh-击败我进入JLS,+1 Argh-击败我进入JLS,+1