Java中的值传递和引用传递

今天突然提到Java传递变量的方式,研究了一下值传递和引用传递。

我的结论是:Java是以值传递的方式传递对象的引用/基本数据类型本身。

可能听起来有点拗口,首先明确一下值传递和引用传递。

值传递,是在方法内无法通过赋值等手段改变这个变量本身,因为传递过程中这个变量被复制了一份传入方法内,方法内对这个形参的操作并不会影响方法外。

而引用传递,则是将对象本身的内存地址传入方法内,方法内操作这个变量会对这个内存地址上这个变量的本体进行操作。

首先Java的方法里,用赋值等号=是改变不了调用者里形参的值的,因此传递的方式是值传递无误。

当然,如果调用这个对象本身的方法去改变自身(例如StringBuilder的append方法,或者是Javabean的Setter方法)是可以做到的,因为这个引用依然引用着这个对象,只是这个对象本身变了而已。

所以给数组的某个索引赋值之后,是可以改变数组本身,因为数组本身也是对象,继承自Object……只不过是一个特殊的对象,可以参考
http://www.blogjava.net/flysky19/articles/92763.html?opt=admin
数组的类是运行时生成的,它没有构造方法。证明数组是对象的最简单方法是:用等号赋值时并没有克隆一份数组,而只是重新指定了引用,要克隆数组得用System.arraycopy()方法。

所以手写排序时递归调用本体,并不会内存爆炸,因为数组本身并没有被复制。

(以上仅仅是个人看法,欢迎指正)

Java中的值传递和引用传递

http://blog.mothership.top/posts/41d67bcb.html

作者

Mother Ship

发布于

2017-10-27

更新于

2023-02-13

许可协议

评论