Java 三元if-else的自动拆箱需求
这段代码运行良好:-Java 三元if-else的自动拆箱需求,java,if-statement,conditional-operator,Java,If Statement,Conditional Operator,这段代码运行良好:- Integer nullInt = null; if (1 <= 3) { Integer secondNull = nullInt; } else { Integer secondNull = -1; } System.out.println("done"); Integer nullInt=null; if(1三元条件表达式的类型 1 <= 3 ? nullInt : -1 现在表达
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Integer nullInt=null;
if(1三元条件表达式的类型
1 <= 3 ? nullInt : -1
现在表达式的类型将是Integer
,因此不会进行取消装箱操作。我很确定三元运算符的参数必须是相同的类型。因为您使用-1和一些常量nullint
编译器尝试取消装箱nullint
以获取值。然后自动装箱以存储在secondNull中代码>变量。这是因为当条件运算符?:
的两个操作数是基元类型及其装箱引用类型时,将执行取消装箱转换():
数值条件表达式的类型确定如下:
- 如果第二个和第三个操作数中的一个是基元类型T,而另一个的类型是对T应用装箱转换(§5.1.7)的结果,则条件表达式的类型是T
通常,将if
语句替换为?:
表达式并不总是保留代码的含义,因为?:
表达式本身需要具有编译时类型。这意味着当两个操作数的类型不同时,必须对其中一个或两个进行转换,以便结果具有c编译时类型一致。此类型有效(在Java 1.8中):
Integer secondNull=1只需添加到您的答案中,以下是提到的表格:
1 <= 3 ? nullInt : -1
1 <= 3 ? nullInt : Integer.valueOf(-1)