![]() |
1
3
的值
仅Java(当前)捕获变量
按价值
. 编译器要求变量是最终的,这样就不会混淆当
这是在C语言和Java中有效地关闭闭包的方式之间的区别。看到我 closures article 了解更多细节。Java 7将使闭包更加简洁——我一直没有遵循,知道是否有任何方式捕获变量本身而不是特定的值。 |
![]() |
2
2
这与线程无关,与构造匿名类无关。问题是,您正在从匿名类中引用局部变量。现在考虑以下内容: int c = 5; Runnable r = new Runnable(){ public void run(){ System.out.println(c); } }; c = 6; r.run(); 在上面的代码片段中,代码应该打印5还是应该打印6?如果R为了解析C而保留对当前堆栈帧的引用,可以想象它可以打印6。也可以想象,它可以提前绑定/捕获c的值并打印5。Java强制你使C最终使这一点完全清楚,同时也可以避免Java挂在当前堆栈框架上的需要。 |
![]() |
3
1
这不是你问题的一部分,但我很好奇:如果是原子整数,为什么要重新分配elvis.x?这种方法忽略了atomicinteger的线程安全性。考虑重写:
另外,由于它具有可变内容,因此不应该是枚举。 |
![]() |
Alaa AbuZarifa · 将方法参数复制到最终temp变量无效 7 年前 |
![]() |
CameronCoob · 最终var更改值JAVA 7 年前 |
![]() |
gcolucci · 函数调用后最终对象失去属性值 7 年前 |
![]() |
Goji Berry · 错误:无法为最终变量赋值 8 年前 |