java - java中Integer、AtomicInteger的区别

标签 java

当我像下面这样使用可选的 java 类时

Integer total = null;
Optional<Integer> b = Optional.of(new Integer(10));
b.ifPresent(b -> total =b);

上面的代码不起作用(错误:java:从 lambda 表达式引用的局部变量必须是最终的或实际上是最终的)但是,当我使用 AtomicInteger 时,它会起作用。为什么会这样?

Optional<Integer> b = Optional.of(new Integer(10));
AtomicInteger total = new AtomicInteger();
b.ifPresent(b -> total.set(b));

最佳答案

你可以这样做:

Integer total = Optional.of(new Integer(10)).orElse(null);

如果 Optional 值可以为 null,则:

Integer total = Optional.ofNullable(new Integer(10)).orElse(null);

Optional.ofNullable 将在 null 值的情况下防止 NPE

在第一个示例中出现此错误的原因是在 lambda 表达式中,您不允许更改局部变量的引用。这就是为什么它们需要被声明为 final 或实际上是 final 的原因。

第二个示例之所以有效,是因为在这里您没有更改 total 变量的引用。您仅使用其 set() 方法更新其值。

关于java - java中Integer、AtomicInteger的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58586385/

相关文章:

java - 在 Java 中生成一个随机整数数组,其中每个元素都与其后继和前驱不同

javascript - Angularjs Post 不向 Spring JWT 发送 header

java - 正则表达式模式上 `java.lang.SecurityException: Prohibited package name` 的解决方法

java - 递归地生成功率集,没有任何循环

java - 具有多个主类的带有 kotlin DSL 的 Gradle 应用程序插件

java - 在 Scala 注释中使用常量的最佳实践

java - 使用交替行颜色制作 scene2d.ui 表?

java - JAX-RS 中的 @DefaultValue 日期为 : now() and MAX

java - 当按下其他键时,该键被取消注册

java - MapReduce 作业挂起