相关疑难解决方法(0)

最终和有效决赛之间的区别

我在Java 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终有效最终之间有什么区别?

java lambda final inner-classes java-8

329
推荐指数
7
解决办法
16万
查看次数

有效地最终与最终 - 不同的行为

到目前为止,我认为有效的 finalfinal或多或少是等效的,如果在实际行为中不相同,JLS 会将它们相似地对待。然后我发现了这个人为的场景:

final int a = 97;
System.out.println(true ? a : 'c'); // outputs a

// versus

int a = 97;
System.out.println(true ? a : 'c'); // outputs 97
Run Code Online (Sandbox Code Playgroud)

显然,JLS 在这里两者之间产生了重要区别,我不知道为什么。

我阅读了其他主题,例如

但他们没有详细说明。毕竟,在更广泛的层面上,它们似乎几乎是等价的。但深入挖掘,它们显然不同。

是什么导致了这种行为,谁能提供一些解释这一点的 JLS 定义?


编辑:我发现了另一个相关的场景:

final String a = "a";
System.out.println(a + "b" == "ab"); // outputs true

// versus

String a = "a";
System.out.println(a + "b" == "ab"); // outputs false
Run Code Online (Sandbox Code Playgroud)

所以字符串实习在这里的行为也不同(我不想在实际代码中使用这个片段,只是对不同的行为感到好奇)。

java final jls language-lawyer effectively-final

103
推荐指数
2
解决办法
3137
查看次数

如何在Java中找到与forEach和lambda表达式的和?

以下代码段无法编译.如何找到如下所示的sum使用forEach方法?

private int Sum(ArrayList<Integer> inputs) {
    int sum = 0;

    inputs.stream().forEach(x -> sum += x);

    return sum;
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

3
推荐指数
2
解决办法
1180
查看次数