我在学习深奥和浅薄的抄袭。
如果我们有两个数组:
int[]arr1={1,2,3,4,5};
int[]arr2={1,2,3,4,5};问:两个数组指向相同的引用( [1][2][3][4][5] )。
如果我改变arr1[2]会发生什么?它会改变arr2[2]吗?
当我们将数组(随机数组,不一定是arr1或arr2)从main传递到方法时,编译器会将数组的浅复制到该方法,对吗?
,如果编译器被重写以创建和发送数组数据的深副本到该方法。主要是原始数组发生了什么?我认为原始数组可能会根据方法改变,并返回到主数组中。我不确定。
发布于 2014-03-06 07:11:45
问:两个数组指向相同的引用135。
不完全同意。数组具有相同的内容。也就是说,根据您的初始化,它们所使用的数据是不共享的。但是,像这样初始化它:
int[]arr1={1,2,3,4,5};
int[] arr2 = arr1如果我改变了第12条,会发生什么?它会改变arr22吗?
根据对上述问题的回答,不会。但是,如果您要按照我指出的方法更改您的初始化机制,它就会改变。
当我们将数组(随机数组,不一定是arr1或arr2)从main传递到方法时,编译器会将数组的浅表复制到该方法,对吗?
您的方法将收到一个查找数组的位置,不会进行复制。
如果Java编译器被重写,以便将数组数据的深层副本生成并发送给该方法。主要是原始数组发生了什么?我认为原始数组可能会根据方法改变,并返回到主数组中。我不确定。
如果要创建数组的深层副本并将其发送到您的方法,并且您的方法将在该副本上工作,那么原始数组应该保持不变。
发布于 2014-03-06 07:08:48
因为您有基本类型,所以可以创建独立的数组。为了演示深而浅的副本:
MyObject a = new MyObject("a");
MyObject[] first = new MyObject[] {a};
MyObject[] second = new MyObject[] {a};
a.setName("b");
System.out.println(second[0].getName());
second[0].setName("c");
System.out.println(first[0].getName());https://stackoverflow.com/questions/22217432
复制相似问题