Java 试图找出为什么将一个对象设置为另一个对象会更新这两个对象 示例代码 公共类测试{ 公开考试(){ runTest(); } 私有void runTest(){ //方法1 int[]A={1,2,3,4}; int[]B=新的int[A.长度]; for(int i=0;i

Java 试图找出为什么将一个对象设置为另一个对象会更新这两个对象 示例代码 公共类测试{ 公开考试(){ runTest(); } 私有void runTest(){ //方法1 int[]A={1,2,3,4}; int[]B=新的int[A.长度]; for(int i=0;i,java,Java,而言,区别在于,对于A和B,B是数组的副本,是与A完全分离的对象。对于C和D,D是另一个数组引用,它引用与C相同的对象D继续引用的不仅仅是“当前位置/状态”,但同一个对象,直到它被重新分配或超出范围。无论您对D引用的对象做了什么,都将通过C可见,因为它是同一个对象。您的尝试是正确的。如果您不创建新对象,您只会有一个对现有对象的引用副本。@PeterLawrey谢谢,如果你在调试器中仔细检查代码,你可以看到每个变量是如何变化的,哪些对象是相同的。 public class test {

而言,区别在于,对于A和B,
B
是数组的副本,是与
A
完全分离的对象。对于C和D,
D
是另一个数组引用,它引用与
C
相同的对象
D
继续引用的不仅仅是“当前位置/状态”,但同一个对象,直到它被重新分配或超出范围。无论您对
D
引用的对象做了什么,都将通过
C
可见,因为它是同一个对象。

您的尝试是正确的。如果您不创建新对象,您只会有一个对现有对象的引用副本。@PeterLawrey谢谢,如果你在调试器中仔细检查代码,你可以看到每个变量是如何变化的,哪些对象是相同的。
public class test {
    
    public test(){
        runTest();
    }
    
    private void runTest(){

//method 1
        int[] A = {1,2,3,4};
        int[] B = new int[A.length];        
        for (int i = 0; i < A.length; i++){
            B[i] = A[i]+1;
        }
        for (int i: A){
            System.out.println(" A: " + i);
        }
        System.out.println("----------");

        for (int i: B){
            System.out.println(" B: " + i);
        }
        System.out.println("----------");



//method 2                
        int[] C = {1,2,3,4};
        int[] D = C;
        for (int i = 0; i <D.length; i++){
            D[i]++;
        }
        for (int i: C){
            System.out.println(" C: " + i);
        }
        System.out.println("----------");

        for (int i: D){
            System.out.println(" D: " + i);
        }
        System.out.println("----------");

        
        
    }
    
    public static void main(String[] args){
        new test();
    }
}