在Java中有引用传递吗?
通过在网上翻阅了众多的资料后,给自己做了以下总结
答:答案是否定的,Java语言的方法调用只支持参数的值传递。
- 追问:你可能会说传入的实参是基本类型的话你能理解,因为形参接收到的值相当于实参值的拷贝,对新参的改变当然不会影响实参;如果实参是引用类型的话就不一样了,你改变形参的属性,那么实参的属性也会跟着变化,这难道不是引用传递吗?
看看加粗的字体,你可能就会突然感觉到好像有什么不对的地方
- 回答:为什么说引用类型的参数也是值传递,首先最应该弄明白的一点就是,引用类型它向方法传递的值是什么?是地址值。而你纠结它会改变的东西是什么?是属性值。你在方法中通过实参给的地址去操作相应的属性,那实参的属性值当然会被改变,那最终实参传本身值改变了吗?这里说的本身的值是什么,是实参本来指向的地址!
最后再上一段代码就一目了然了
public class Test {
public static void main(String[] args) throws Exception {
int[] arr = {1,2,3};
toZero(arr);
System.out.println(Arrays.toString(arr));
}
public static void toZero(int[] newarr){
// newarr[0] = 0; // --> arr={0,2,3}
newarr = new int[]{4,5,6}; // --> arr={1,2,3}
}
}