这里是问题:编写一个方法来交换两个变量的值。这两个变量应该是原始类型(primitives)。它不需要是通用的,例如两个int
变量。有办法吗?!
这里是问题:编写一个方法来交换两个变量的值。这两个变量应该是原始类型(primitives)。它不需要是通用的,例如两个int
变量。有办法吗?!
int returnFirst(int x, int y) {
return x;
}
<T> T returnFirst(T x, T y) {
return x;
}
// other overloads as needed
int a = 8, b = 3;
a = returnFirst(b, b = a); // try reading this as a = b; b = a;
System.out.println("a: " + a + ", b: " + b); // prints a: 3, b: 8
a=b;b=a;
的形式。看看这样的代码多简洁:a=_(b,b=a);
。 - marcus不使用数组或对象,不能在一个方法内完成该操作。
请查看这篇JavaWorld文章,它详细解释了这个问题:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
交换两个原始数据类型的值永远不会起作用,因为在Java中,原始数据类型是按值传递的。你甚至不能编写一个方法来交换两个对象。
正如@Thomas所说,您唯一能做的就是将原始数据类型包含在其他对象/数组中,并修改它们。
任何原始数字的一行代码:
a += (b - (b = a));
<T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z);
return args[0];
}
b = swap(a, a=b);
z = swap(x, x=y, y=z);
private void swap(){
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
}
可能并没有太大用处;)
好的,认真地说,如果变量是类级别的,那么可以这样做:
public class MyClass{
// excuse horrible coding practice of public mutable fields
public int a = 1;
public int b = 2;
public void swap(){
int temp = a;
a = b;
b = temp;
}
}
虽然如此,我仍然看不出这有什么用处。
这个函数将交换两个整数
Integer[] swap(int a, int b){
return new Integer[]{b,a};
}