Java的值传递机制

基本数据类型
当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数。

class Basic {
    
    
public void change(int a) {
    
    
	a=a*3;
}
}

public class Test1 {
    
    
public static void main(String[] args) {
    
    
	int a=10;
	Basic basic = new Basic();
	System.out.println(a);
	basic.change(a);
	System.out.println("----------"+a);
}
}

程序结果:
在这里插入图片描述

引用数据类型
当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值。

public class Studet {
    
    
	String name;
	int age;

	public String getName() {
    
    
		return name;
	}

	@Override
	public String toString() {
    
    
		return "Studet [name=" + name + ", age=" + age + "]";
	}

}
public class Test2 {
    
    
	public  static void change(Studet stu) {
    
    
		stu.name="李四";
		stu.age=18;
		
	}
public static void main(String[] args) {
    
    
	Studet studet = new Studet();
	studet.name="张三";
	studet.age=20;
	System.out.println(studet.toString());
	change(studet);
	System.out.println(studet.toString());
}
}

结果
在这里插入图片描述

//Studet类同上


public class Test2 {
    
    
	public  static void swap(Studet s1,Studet s2) {
    
    
		Studet temp=s1;
		s1=s2;
		s2=temp;
		
	}
public static void main(String[] args) {
    
    
	Studet s1 = new Studet();
	Studet s2 = new Studet();
	s1.name="张三";
	s1.age=20;
	s2.name="李四";
	s2.age=18;
	System.out.println(s1.toString());
	System.out.println(s2.toString());
	swap(s1,s2);
	System.out.println(s1.toString());
	System.out.println(s2.toString());
}
}

结果:
在这里插入图片描述

总结
一个方法不能修改一个基本数据类型的参数(数值型和布尔型)。

一个方法可以修改一个引用所指向的对象状态,但这仍然是按值调用而非引用调用。

上面两种传递都进行了值拷贝的过程。
java中只有按值传递,不能按引用传递。

猜你喜欢

转载自blog.csdn.net/BKKBjams/article/details/107456140