Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匿名类在Java中获得最终变量的浅拷贝还是深拷贝?_Java_Deep Copy_Anonymous Class_Shallow Copy - Fatal编程技术网

匿名类在Java中获得最终变量的浅拷贝还是深拷贝?

匿名类在Java中获得最终变量的浅拷贝还是深拷贝?,java,deep-copy,anonymous-class,shallow-copy,Java,Deep Copy,Anonymous Class,Shallow Copy,我读过 并查看匿名类获取外部类变量的执行上下文的副本。不,我在哪里可以找到匿名类是否获取最终变量的浅副本或深副本。我尝试使用 使用一些android代码,但它可以是任何java平台。我尝试测试: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSt

我读过

并查看匿名类获取外部类变量的执行上下文的副本。不,我在哪里可以找到匿名类是否获取最终变量的浅副本或深副本。我尝试使用 使用一些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");

}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv=(TextView)findViewById(R.id.tv);
最终列表jason=newarraylist();
add(“我的第一个字符串”);
tv.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.v(“mytag”,jason.get(0));
}
});
jason.clear();
add(“我的第二个字符串”);
}
}

当我单击文本时,日志中的输出是“我的第二个字符串”。

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

来自:

…局部类可以访问局部变量

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

请注意,它表示的是变量,而不是对象,因此没有进行深度复制


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

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)
final ArrayList list=new ArrayList();
增加(5);
新建Runnable(){public void run(){list.add(6);}}}.run();
System.out.println(列表);//[5,6](如果是深度复制,则为[5])
()

来自:

…局部类可以访问局部变量

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

请注意,它表示的是变量,而不是对象,因此没有进行深度复制


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

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)
final ArrayList list=new ArrayList();
增加(5);
新建Runnable(){public void run(){list.add(6);}}}.run();
System.out.println(列表);//[5,6](如果是深度复制,则为[5])

()

它获取变量的副本,而不是引用的对象变量引用。我不清楚,是否有人可以使用我的示例发布一个示例。您对变量和对象之间的区别感到满意吗?@KevinKrumwiede-这里指的是局部变量,而不是成员变量。虽然从语义上看它没有副本,但这可能是实现的工作方式(和是OP引用的post所使用的语言)。它获取变量的副本,而不是引用的对象的副本变量引用。我不清楚,是否有人可以使用我的示例发布一个示例。您对变量和对象之间的区别感到满意吗?@KevinKrumwiede-这里指的是局部变量,而不是成员变量。虽然从语义上看它没有副本,但这可能是实现的工作方式(并且是OP所指的帖子所使用的语言)。