java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
传值就是你改变这个值,不会改变原值传引用就是你改变这个值,不会改变原值
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。
参数是基本类型就是传值,传对象就是引用传递。
swap(Integer x, Integer y)可以传递引用,但是没办法实现交换。这跟Integer的实现方式有关。所以不是引用传递就一定能改变外面的值。
下面是引用传递,交换的情况,又臭又长。
class Untitled {
int needFix
public static void swap(Untitled x, Untitled y) {
int temp = x.needFix
x.needFix = y.needFix
y.needFix = temp
}
public static void main(String[] args) {
Untitled u1 = new Untitled()
Untitled u2 = new Untitled()
u1.needFix = 3
u2.needFix = 4
swap(u1, u2)
System.out.println(u1.needFix+","+u2.needFix)
}
}
另外,你可以考虑一下引用传递,不过也是一种传值,java里面没有事实上的指针。直接交换引用指向的对象是没有作用的。
Untitled temp = xx = y
y = temp
无效。