上一篇中提及,Java为什么只有值传递,思来想去还是很迷惑,于是决定利用代码和图来理解实参和形参的转换过程。引用《Java核心技术》第四章 对象与类 中的第4.5节 方法参数中的描述:值调用(call by value)表示方法接收的是调用者提供的值,而引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。Java程序设计语言总是采用值调用,也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
先明白一点就是Java的实参是怎么传入到方法的?
将实际参数值的副本传入到方法内,参数本身并不改变。
形参是基本数据类型:将实参基本数据类型变量的”数据值“传递给形式参数;
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形
式参数;public class ValueTransferTest {
public static void main(String[] args) {
int m = 66;
int n = m;
System.out.println("m = " +m +",n = "+ n);//m = 66,n = 66
n = 55;
System.out.println("m = " +m +",n = "+ n);//m = 66,n = 55
Person p1 = new Person();
p1.age = 22;
p1.name = "Emousn";
Person p2 = p1;//赋值以后,两个对象指向同一个存储空间,一个改变,另一个也会改变
System.out.println("name = "+p1.name+",age = " +p1.age);//name = Emousn,age = 22
System.out.println("name = "+p2.name+",age = " +p2.age);//name = Emousn,age = 22
p2.name = "Mouse";
p2.age = 12;
System.out.println("name = "+p1.name+",age = " +p1.age);//name = Mouse,age = 12
System.out.println("name = "+p2.name+",age = " +p2.age);//name = Mouse,age = 12
}
}
class Person{ String name; int age;}

内存图解释:形参是基本数据类型:将实参基本数据类型变量的”数据值“传递给形式参数;

地址值传递:

内存图解释:

这样一来就非常清楚的展示了,Java中是值传递,传递的不是内容而是数值。