Java 基本数据类型参数传递VS引用数据类型参数传递

        方法是类或者对象的行为特征抽象,方法是类或者对象最重要的组成部分。Java 中的方法不能独立存在,所有的方法要么属于类,要么属于对象。static 静态修饰的方法属于类,非静态修饰的方法属于对象。

方法所属性

        在 Java 语言中,方法不能独立存在,方法必须属于类或者对象。因此如果定义方法,那么方法只能定义在类体 内,不能独立定义一个方法。如果方法使用 static 修饰,那么这个方法属于这个类,否则这个方法属于这个类的实例。 因此方法的执行者要么是类或者类的实例对象。

方法的参数传递机制

        在方法声明时如果包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际传递给形参的参数值也被称为实参。Java 里方法的参数传递方式只有一种:值传递。所谓的值传递就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受任何影响。

        但是在 Java 中数据类型分为基本数据类型与引用类型,而且两种类型存储的数据方式不同,所以在进行方法的参数传递时也有所不同。

基本数据类型参数传递

        实例代码:

public class Test {
public static void main(String[] args) {
int num = 12;
printNum(num);
System.out.println("实参变量 num 的值:"+num); // 输出 12
}
public static void printNum(int a) {
a = a + 5;
System.out.println("形参变量 a 的值:"+a); // 输出 17
}

        分析:在 main 方法中,实参 num 变量存储的数据值是 12,在调用 printNum 方法时,将 num 变量的值复制了一份,传递给了形参变量 a,形参变量 a 接收到了值 12,在方法内部对形参变量 a 进行处理时,与实际参数 num 没 有任何关系。所以实际参数 num 不会有任何变化。所以实际参数 num 的值仍然是 12。只是形参变量 a 的值进行了改变而已。

引用数据类型参数传递

        示例代码:

public class Test {
public static void main(String[] args) {
Person person = new Person("张三");
changeName(person);
System.out.println("这个人的名字是:"+person.name); // 打印李四
}
public static void changeName(Person per) {
per.name = "李四";
System.out.println("这个人的名字是:"+per.name); // 打印李四
}
}

        分析:在 main 方法执行时,引用类型变量 person 存储的是地址值,假设地址值是 0X1A,在调用 changeName 方法时,将变量 person 的值复制了一份传递给了形参变量 per,per 存储的值也是 0X1A,就根据这个地址值找到了 同一个对象。在对对象进行更改时,person 变量再调用时根据地址找过来时,已经是对象更改后的信息了。

基本数据类型为参数时的传递,引用数据类型为参数时的传递,传递的同样是实际值的副本,但要注意的是引用数据类型的值存放的是地址值,即指向实际对象的那个地址值。所以调用方法时将地址值传递给了方法,方法操作时根据地址值找到了具体的对象,将具体对象的信息发生了变化。

你可能感兴趣的:(JAVA,java,开发语言)