【发布时间】:2017-03-01 00:33:02
【问题描述】:
为什么允许以下行为:
final boolean [] success = new boolean[1];
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HTTPConnect httpConnect = new HTTPConnect(getContext());
success[0] = false
...
if (whatever)
success[0] = true;
但以下不是?
final boolean success;
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HTTPConnect httpConnect = new HTTPConnect(getContext());
success = false
...
if (whatever)
success = true;
我在这里指的是boolean success。
起初我以为这是因为本地声明会失去作用域,而堆上的声明会在作用域结束后继续存在,但这似乎并非如此,因为像 final ArrayList<Foo> bar = new ArrayList<>() 这样的声明不能被赋值。
【问题讨论】:
-
从代码中删除所有不必要的部分,你问为什么这不起作用:
boolean success; success[0] = true;答案很简单:因为success是原始布尔值而不是数组。 -
@Kiryl 这是一个错字,已修复。
标签: java multithreading runnable