java中所有的参数传递都是值传递,也就是说传递的是值的副本,而不是原件,因此,副本的改变不会影响原件。
1、值传递的类型
(1)基本数据类型参数的传递
传递的是值的副本,副本改变不会影响原件
(2)引用类型参数的传递
传递的是值的副本,引用类型指的是对象的地址,因此,副本和原参数指向了同一个地址,改变副本指向地址对象的值,原参数的值也就跟着改变了。
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public void testPara(Student student1){
student1.name="zhang";
}
public static void main(String args[]){
Student student=new Student("zhai",12);
student.testPara(student);
System.out.println(student.name);
}
}
程序运行产生的结果为zhang,因为,student对象的引用和student1对象的引用指向的是同一个地址,student1将对象的值改变后student对象也发生了改变。
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public void testPara(Student student1){
student1.name="zhang";
}
public void testPara1(Student student2){
student2=new Student("liu",11);
}
public static void main(String args[]){
Student student=new Student("zhai",12);
student.testPara(student);
System.out.println(student.name);
student.testPara1(student);
System.out.println(student.name);
}
}
zhang
zhang
第一步,student和student1对象的引用指向同一个对象:
student1将name属性进行了修改:
第三步,student2和student对象的引用指向同一个对象:
由于testPara1方法内对student2对象的引用创建了新的对象,因此,student2又指向了这个新创建的对象:
2、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递,Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对象的引用是永远不会改变的。
标签:传递,name,对象,student1,参数传递,student,Student,javase,public
来源: https://www.cnblogs.com/zhai1997/p/12532784.html