Integer
可以为 null
。我通过以下方式将 Integer
转换为 int
:
Integer integer = null;
int i;
try {
i = integer.intValue();
}
catch (NullPointerException e) {
i = -1;
}
有更好的方法吗?
Integer
可以为 null
。我通过以下方式将 Integer
转换为 int
:
Integer integer = null;
int i;
try {
i = integer.intValue();
}
catch (NullPointerException e) {
i = -1;
}
有更好的方法吗?
使用Java8,以下代码也可以正常工作:
Optional.ofNullable(integer).orElse(-1)
避免异常总是更好。
int i = integer != null ? integer.intValue() : -1;
int i = integer == null ? 0 : integer;
。 - Kayaman.intValue()
)就可以正常工作(Java会自动拆箱)。你认为显式调用intValue
更有效吗? - Eran.intValue()
并不是避免自动拆箱;它是明确地进行了拆箱。 - khelwoodInteger#intValue()
的源代码,您会发现该方法返回嵌套的private final int value;
。因此,将integer.intValue()
分配给int
不会触发编译器的任何装箱/拆箱功能。但是,使用int i = integer;
实际上将强制编译器将Integer
拆箱为int
。这就是为什么我认为显式调用.intValue()
更高效(即使没有太大的性能差异)和可读性更好的原因。 - Konstantin YovkovJava 9 引入了 Objects.requireNonNullElse,在不使用外部库的情况下,Java Vanilla 提供了替代方法:
Integer integerValue = null;
int intValue = Objects.requireNonNullElse(integerValue, 0);
如果您的类路径中已经有guava
,那么我喜欢michaelgulak提供的答案。
Integer integer = null;
int i = MoreObjects.firstNonNull(integer, -1);
Apache Commons Lang 3
ObjectUtils.firstNonNull(T...)
Stream.of(T...).filter(Objects::nonNull).findFirst().orElse(null)