引用数据类型值的传递传递的是堆内存空间的地址
例子1:
public class object {
public static void main(String[] args) {
Person person1 = new Person(20);//person1指向内存空间1001
Person person2 = person1;//person2也指向内存空间1001
person2.age = 30;
System.out.println("person1"+person1);
System.out.println("person2"+person2);
}
}
class Person{
int age;
public Person(int age){
this.age = age;
}
@Override
public String toString() {
return "的age=" + age;
}
}
运行结果:
person1的age=30
person2的age=30
分析:
变量person2和变量person1指向的是同一块内存,所以修改person2的值时,person1也会跟着改变
例子2:
public class object {
public static void main(String[] args) {
Person person1 = new Person(20);//person1指向内存空间1001
change(person1);
System.out.println("person1"+person1);
}
public static void change(Person person2){
//刚调用方法时,person2指向person1的内存空间
person2 = new Person(30);//新开辟一个内存空间1002存放新的person对象
System.out.println("person2"+person2);
}
}
class Person{
int age;
public Person(int age){
this.age = age;
}
@Override
public String toString() {
return "的age=" + age;
}
}
运行结果:
person2的age=30
person1的age=20
分析:
change方法执行后,变量person2存放的是新创建的person对象的地址值,也就是说变量person2指向内存空间1002,main方法中的person1变量指向的内存空间仍为1001
搜索
复制
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/274854.html