Java到底是传引用还是传值

Python018

Java到底是传引用还是传值,第1张

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 = x

x = y

y = temp

无效。