Java 如何编写swap()方法或替代方法?

Java 如何编写swap()方法或替代方法?,java,swap,Java,Swap,我知道在座的各位都很有知识,通常都很擅长解释,所以我想征求你们的意见 我看过一些关于按值传递和按引用传递语言之间区别的帖子和文章,它们让我对如何实现swap方法非常好奇。这是一个特别有趣的问题,因为学校项目和个人项目都在/将要使用交换方法来工作。我确实找到了马库斯的一个相当新颖的解决方案,如果我找不到另一个,我会使用它 我的理解是,不可能执行以下操作,因此导致x=5,y=10: int x = 10; int y = 5; swap(int a, int b) { int temp

我知道在座的各位都很有知识,通常都很擅长解释,所以我想征求你们的意见

我看过一些关于按值传递和按引用传递语言之间区别的帖子和文章,它们让我对如何实现swap方法非常好奇。这是一个特别有趣的问题,因为学校项目和个人项目都在/将要使用交换方法来工作。我确实找到了马库斯的一个相当新颖的解决方案,如果我找不到另一个,我会使用它


我的理解是,不可能执行以下操作,因此导致
x=5,y=10

int x = 10; int y = 5; 

swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

public static void main(String[] args) {
    swap(x, y);
    //x = 10, y = 5
    System.out.println("x was 10 and y was 5");
    System.out.println("Now x is " + x + ", and y is " + y);
}
但是,据我所知,由于x和y未通过,以下方法将起作用:

int x = 10; int y = 5;

swap() {
    int temp = x;
    x = y;
    y = temp;
}

public static void main(String[] args) {
    swap();
    //x = 5, y = 10
}


如何交换两个基本体?同一对象的两个实例如何(我只需要交换字段/变量)?在数组中交换有什么特殊的注意事项吗?

这样的交换原语在Java中是做不到的。最接近的方法是交换对象中包含的信息,无论是数组还是包含值的常规对象。

您可以通过将两个原语存储在对象(例如数组列表)中来交换它们。 对象位于堆空间中,因此基本上向swap方法传递数组列表就像传递对该数组列表的引用一样

希望有帮助


编辑:需要注意的是,JAVA中传递的所有参数都是按值传递的。,但在传递对象时,基本上传递的是指向堆上分配的对象的对象引用值。

,只有当原语在全局范围或类范围内时,方法才能切换到原语

至于数组和对象,它们在Java中是通过引用传递的。因此,您所做的任何更改都会更改方法的实际参数。另一方面,如果您正在寻找一种交换两个对象的简洁方法,只需在类中实现一个swap方法作为一个方法,并按如下方式调用它:

anObject.swap(anotherObject);

这样你就可以随心所欲地实现交换。

这是一个相当肮脏的解决方法。啊,有趣的解决方案。遗憾的是,我需要交换的值通常位于不同的类或变量中,因此在大多数情况下,这种解决方案是不可行的。不过,这对于我的学校项目来说是完美的,它只是在ArrayList中交换值。谢谢+1@EnginKayraklioglu,这是一个棘手的问题,适合面试,也需要一个棘手的答案。事实上,我在不久前的一次采访中被问到了这个问题。好吧,如果我确实需要交换原语,我会再次检查原语是否总是全局声明的。我一定会用你的物品。交换(物品)建议。你完美地回答了我的问题,所以+1是最好的答案!在Java中,数组和对象不是通过引用传递的。相反,对它们的引用是按值传递的。