当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中改变,但对对象引用的改变是不会影响到调用者的
为什么 Java 中只有值传递?
在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。 它用来描述各种程序设计语言(不只是java)中方法参数传递方式。
Java 程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。
很多程序设计语言(特别是,C++ 和 Pascal)提供了两种参数传递的方式:值调用和引用调用。有些程序员认为 Java 程序设计语言对对象采用的是引用调用,实际上,这种理解是不对的,并且这种误解具有一定的普遍性
总结
Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用的是按值传递。
Java 中方法的使用情况
- 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象
值传递和引用传递有什么区别
值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是指的拷贝,也就是说传递后就互不相关了。
应用传递:指的是在方法调用时,传递的参数是按引用传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值得引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)