我试图在java中创建一个交换函数,但为什么这不起作用?
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
答案 0 :(得分:8)
因为java是pass by value而不是通过引用传递。您的互换方法不会更改实际的a
和b
。您实际上已经交换了a
和b
,它们仅在方法内部生效。您只需在a
方法中打印b
和swap
即可查看。
您可以在数组的帮助下返回交换的值。 (首先由sᴜʀᴇsʜ ᴀᴛᴛᴀ
添加)
public class Test {
static int[] swap(int a, int b) {
return new int[]{b,a};
}
public static void main(String[] args) {
int a = 10,b = 5;
int[] ba = swap(a,b);
a = ba[0];
b = ba[1];
System.out.println(a);
System.out.println(b);
}
}
答案 1 :(得分:2)
您的swap
只会将值的副本转换为a
和b
,因此您只需交换a
和b
变量中的值在swap
的范围内。
答案 2 :(得分:1)
public class HelloWorld {
private int a, b;
HelloWorld(){
this.a=0;
this.b=0;
}
HelloWorld(int a, int b){
this.a=a;
this.b=b;
}
void swap() {
int temp = this.a;
this.a = this.b;
this.b = temp;
}
public static void main(String[] args) {
HelloWorld obj = new HelloWorld(10,5);
obj.swap();
System.out.println("a="+obj.a);
System.out.println("b="+obj.b);
}
}
如果使用局部变量,则范围将在swap()方法中。但是如果你将它用作实例变量,这个例子会有所帮助
实例变量的范围可以在全班中使用
您可以查看范围
的 http://www.tutorialspoint.com/java/java_variable_types.htm 强>
如果你想使用局部变量,那么 TAsk 给出的答案会更有帮助。根据您的要求。