Java的引用传递

Java只有值传递,但传递的是引用,类似C/C++中的指针。

往容器里添加引用类型数据

将一个引用装入容器时,若外部程序对该引用指向的内容作了修改,那么容器里的内容也会改变。也就是说将一个引用类型变量加入到容器中,实际上还留了个“指针”在外部,通过对“指针”所指内容的修改会造成容器里内容的改变,这点需要格外注意。
因此往容器中添加元素时,添加不同的元素要使用不同的引用

举例说明:

List<StringBuilder> list=new ArrayList<>();
StringBuilder sb=new StringBuilder("abcd");
list.add(sb);
sb.setCharAt(0,'e');
list.add(sb);
sb.setCharAt(1,'f');
list.add(sb);
sb.setCharAt(2,'g');
list.add(sb);
System.out.println(list);

程序输出:

[efgd, efgd, efgd, efgd]

setCharAt()对引用指向的内容作了修改,则list内的内容也会跟着改变。list包含4个元素,但这四个元素(引用类型)都指向了内存中的同一个地方,引用指向的内容最后被修改成了"efgd",因此4个元素值都是efgd。

引用类型作为函数参数

当引用类型变量作为函数参数时,在函数体内只能对引用指向的内容做修改,而不能给这个引用类型变量重新赋值。因为Java传参传递的是引用,给这个引用类型变量重新赋值后,它就指向了其它地方。

posted @ 2021-01-01 23:02  归鸿唱晚  阅读(987)  评论(0编辑  收藏  举报