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

标签 java swap

<分区>

我知道在座的所有人都知识渊博,而且通常都非常善于解释,所以我想征求你们的意见。

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


我的理解是,不可能实现以下内容并使 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中是通过引用传递的。因此,您所做的任何更改都会更改方法的实际参数。另一方面,如果您正在寻找一种交换两个对象的巧妙方法,只需将交换方法实现为类中的一个方法,然后像这样调用它:

anObject.swap(anotherObject);

通过这种方式,您可以根据需要实现交换。

关于java - 如何编写 swap() 方法或替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267601/

相关文章:

java - 无法从Hadoop MapReduce程序搜索Elasticsearch

Java编译错误(javax.swing.JComponent)

java - 在 java 帮助中格式化输出

C - 交换单链表中的第一个和最后一个元素

c - C语言中 "string"的通用交换

java - 从 DateTime 控件获取日期

java - BufferedReader 和扫描仪 : limit the number of input characters

algorithm - 如果变量是相同的存储位置,为什么 XOR 交换算法会失败,但如果变量是相同的值则不会

c - C 中的 LinkedList 元素交换问题

memory - `std::mem::swap` 是如何工作的?