gpt4 book ai didi

java-8 - 为什么在 Java 8 中有多个版本的 Optional

转载 作者:行者123 更新时间:2023-12-04 23:01:21 24 4
gpt4 key购买 nike

我注意到,Java 8 中有许多类型的多个版本。

例如,介绍 Optional 类(class)有多种口味 OptionalInt , OptionalLong等等..

虽然Optional有一个类型参数( Optional<T> ),我们仍然需要一些特定类型的原语,为什么?

我找不到以下之间的大区别:

Optional<Integer> o = Arrays.asList(1, 3, 6, 5).stream().filter(i -> i % 2 == 0).findAny();
System.out.println(o.orElse(-1));

OptionalInt oi = Arrays.stream(new int[] { 1, 3, 6, 5 }).filter(i -> i % 2 == 0).findAny();
System.out.println(oi.orElse(-1));

最佳答案

确实如此Optional<Integer>行为与 OptionalInt 非常相似从功能的角度来看。例如,以下方法之间没有功能差异:

int foo(int value) {
return OptionalInt.of(value).orElse(4242);
}
int bar(int value) {
return Optional.of(value).orElse(4242);
}

但是,性能和效率可能会有所不同——这取决于 optional 类型的使用方式以及 JIT 编译器的功能。第二种方法与以下方法基本相同:
int baz(int value) {
return Optional.of(Integer.valueOf(value))
.orElse(Integer.valueOf(4242))
.intValue();
}

如您所见,由于每个方法调用的自动装箱,最多将创建两个额外的 Integer 对象。与原生类型相比,创建一个对象的代价是昂贵的,每增加一个对象都会增加垃圾回收的压力。

这并不意味着它会对大多数应用程序产生影响。但它可以产生影响,如果它不存在,就会降低对 Java 8 Streams 的接受度。

关于java-8 - 为什么在 Java 8 中有多个版本的 Optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com