Java 语言的参数传递只有「按值传递」。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。
对于8个基础类型(byte, short, int, long, float, double, char, boolean),很容易看出来是值传递,就不详细说了。
方法声明中的参数是形参,调用方法时传入的参数是实参。调用时传入参数的过程,是将实参拷贝一份赋值给形参的。
对于引用类型的对象,本身是一个指向实际内容的引用,在作为参数传递时,这个引用就是参数。所以此时发生拷贝的是“引用”,也就是生成了一个新的引用,只是引用的内容是一样的。
如果在被调用的方法内,将传入的引用,指向一个新的内容,外部的原对象引用是不会指向这个新内容的。由此可见,引用类型的对象在作为参数传递时也是值传递。
暂无评论