匿名类是否在Java中获得最终变量的浅层或深层副本?

时间:2016-03-06 16:40:26

标签: java deep-copy anonymous-class shallow-copy

我已阅读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".

因此,当我从外部类更改列表时,它确实影响了匿名类。那么我可以假设它总是得到浅层副本吗?

1 个答案:

答案 0 :(得分:4)

来自the Java tutorial

  

......本地类可以访问局部变量。

(其中“本地类”也适用于“匿名类”)。

请注意,它表示变量,而不是对象。所以没有深刻的复制。

您可以使用以下代码进行实验验证:

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)

Live demo