Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在自动装箱中,转换是基于我们分配给的变量/引用,还是基于其他方式?_Java_Autoboxing - Fatal编程技术网

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
为了避免NPE,您需要先初始化
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