交换基元的 Java 方法

2022-08-31 20:46:22

如果没有可以通过引用传递的方法,如何在java中制作我的交换函数?有人可以给我一个代码吗?

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

但是这些更改不会反映回来,因为java按值传递参数。


答案 1

我认为这是最接近简单交换的方法,但它没有直接的使用模式:

int swap(int a, int b) {  // usage: y = swap(x, x=y);
   return a;
}

y = swap(x, x=y);

它依赖于将传入之前分配给 的事实,然后返回并分配给 。xswapyxxy

您可以将其设为泛型并交换任意数量的相同类型的对象:

<T> T swap(T... args) {   // usage: z = swap(a, a=b, b=c, ... y=z);
    return args[0];
}

c = swap(a, a=b, b=c)

答案 2

您无法创建方法交换,因此在调用 x 和 y 的值后将被交换。您可以通过交换可变类的内容¹ 来为可变类创建这样的方法,但这不会更改它们的对象标识,并且您无法为此定义通用方法。swap(x,y)

但是,您可以编写一个方法,该方法交换数组或列表中的两个项目(如果这是您想要的)。

¹ 例如,您可以创建一个包含两个列表的交换方法,执行该方法后,列表 x 将具有列表 y 的先前内容,列表 y 将具有列表 x 的先前内容。


推荐