您好 这个是传参问题:
java方法中参数传递方式是按值传递 也就是传递参数的一分拷贝
对于普通类型参数 在方法内是不能改变传入值的但是对于对象的引用指向堆内实际内存 我们传递数组实际上是传递一个数组引用int[] a
这个是会改变其指向的实际内容的. 比方说你在方法内进行a[0] = 1; 这样会有变化希望对你有帮助
java方法中参数传递方式是按值传递 也就是传递参数的一分拷贝
对于普通类型参数 在方法内是不能改变传入值的但是对于对象的引用指向堆内实际内存 我们传递数组实际上是传递一个数组引用int[] a
这个是会改变其指向的实际内容的. 比方说你在方法内进行a[0] = 1; 这样会有变化希望对你有帮助
对象类型都是通过引用拷贝(跟C++中引用不同)传参,通过该引用能够更改其指向的对象内部值,但是更改该引用值,仅对函数内部可见,函数外部的实参依然没有改变;
所以正常来说,Java不能实现C/C++中的swap功能。
package learning;
class NumWrap{
int a = 35;
int b = 60;
}
public class Dome {
static int a = 35;
static int b = 60;
public static void main(String[] args) {
System.out.println("Before swapPrim a = " + a + ", b = " + b);
swapPrim(a, b);
System.out.println("After swapPrim a = " + a + ", b = " + b); System.out.println("Before swapRef a = " + a + ", b = " + b);
swapRef(new NumWrap());
System.out.println("Before swapRef a = " + a + ", b = " + b);
} public static void swapPrim(int x, int y) {
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
public static void swapRef(NumWrap x) {
x.a = x.a ^ x.b;
x.b = x.a ^ x.b;
x.a = x.a ^ x.b;
a = x.a;
b = x.b;
}
}
在java里面的参数都是按值传递的,也就是只传递参数的值,这样的话不会影响实际变量。要想实现swap功能,可以在方法中直接操作变量,或者将形参表示为对象
public class Dome {
public int a;
public int b;
public static void main(String[] args){
int a = 35;
int b = 60;
swap(a,b);
System.out.println("a=" + this.a + " b=" + this.b);
}public void swap(int a, int b) {
this.a = b;
this.b = a;
};
}三楼说的将参数改为Integer,是行不通的。
1: 直接在main方法里交换 这个肯定没有问题
2: 把要交换的数据作为一个class的成员变量 通过这个class的实例操作 也没有问题
3: 把要交换的数据放入数组 操作数组引用 也没有问题
基本也就这几种了