我已阅读enter link description here
并看到匿名类获取外部类变量的执行上下文的副本。如果匿名类获得最终变量的浅拷贝或深层副本,我无论在哪里都能找到。我尝试过使用 使用一些android代码但它可以是任何java平台。我试着测试一下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.tv);
final List<String> jason = new ArrayList<>();
jason.add("my first string");
tv.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Log.v("mytag",jason.get(0));
}
});
jason.clear();
jason.add("my second string");
}
}
单击文本时,和日志中的输出为"my second string".
因此,当我从外部类更改列表时,它确实影响了匿名类。那么我可以假设它总是得到浅层副本吗?
答案 0 :(得分:4)
......本地类可以访问局部变量。
(其中“本地类”也适用于“匿名类”)。
请注意,它表示变量,而不是对象。所以没有深刻的复制。
您可以使用以下代码进行实验验证:
final ArrayList<Integer> list = new ArrayList<>();
list.add(5);
new Runnable() { public void run() { list.add(6); } }.run();
System.out.println(list); // [5, 6] (would be [5] if had been deep-copied)