关于#java#的问题

为什么交换不成功

img

public class AssignNewObject {

         public void swap(MyData my){
         my = new MyData(); //考虑堆空间此新创建的对象,和 main 中的 data 对象是否有关
         int temp = my.x;
         my.x = my.y;
         my.y = temp;
         
         }
         public static void main(String[] args) {
         AssignNewObject tools = new AssignNewObject();
         
         MyData data = new MyData();
         data.x = 1;
         data.y = 2;
         System.out.println("交换之前:x = " + data.x +",y = " + data.y);//
         tools.swap(data);//调用完之后,x 与 y 的值交换?
         System.out.println("交换之后:x = " + data.x +",y = " + data.y);//
         }
        }
        class MyData{
         int x ;
         int y;
        }

把下面的 my = new MyData(); 注释掉就可以交换了


public class AssignNewObject {
 
         public void swap(MyData my){
         // my = new MyData(); //考虑堆空间此新创建的对象,和 main 中的 data 对象是否有关
         int temp = my.x;
         my.x = my.y;
         my.y = temp;
         
         }
         public static void main(String[] args) {
         AssignNewObject tools = new AssignNewObject();
         
         MyData data = new MyData();
         data.x = 1;
         data.y = 2;
         System.out.println("交换之前:x = " + data.x +",y = " + data.y);//
         tools.swap(data);//调用完之后,x 与 y 的值交换?
         System.out.println("交换之后:x = " + data.x +",y = " + data.y);//
         }
        }
        class MyData{
         int x ;
         int y;
        }
 
public void swap(MyData my){
         my = new MyData(); //考虑堆空间此新创建的对象,和 main 中的 data 对象是否有关
         int temp = my.x;
         my.x = my.y;
         my.y = temp;
         
         }

你这里my对象又重新赋值了,导致你的my是个全新的对象。 所以失效

哥们,你这个swap里边的my = new MyData()明显又为my实例创建了新的引用,当然就和之前的无关了,肯定交换不了啊

img