Java引用个对象是否在内存中真实存在还是只是一个地址?

2025-02-27 15:24:01
推荐回答(4个)
回答1:

你表达的不够清晰,我这样跟你说吧!
User u = new User("亭台T","20","女");
这行语句其实分两部分,从等号分开来说:
右边new User();构造方法是真实的在内存中new出来一块空间;
而你的u对象 实际上只是拿到了这块空间的一个引用,或者说就是一个地址而已;
如果下面你再跟着一句代码:
User d = u;
那么d 也只是拿到了上面那块地址的引用,也就是说u 和 d 现在为止,其实本质上是一个对象,因为内存中只有一个你最开始new 出来的那块空间;
如果按如下方法来做你就会发现问题了:
u.setName("奇迹软件工作室");
System.out.print(d.getName());
你会发现你set 了u对象的属性,但是打印出来d的name也跟着变了,
也就是说,u和d都是引用,他们都引用了同一块内存的真对象地址;

奇迹软件工作室 东东程序猿 手打 请给分

回答2:

图解,希望能够帮到你!

回答3:

public class Person {
private double p;
private int a;
public Person(double p, int a) {
super();
this.p = p;
this.a = a;
}
public double getP() {
return p;
}
public void setP(double p) {
this.p = p;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}

public static void main(String[] args) {
Person p1=new Person(3.14,2);
Person p2=p1;
p2.setA(5);
System.out.println(p1);
System.out.println(p2);
System.out.println(p1==p2);
System.out.println(p1.getA());
}
###################################
Person@c17164
Person@c17164
true
5
从这个代码和打印的输出可以明确的看出
引用的只是一个地址

回答4:

把对象赋值只是把对象的地址赋值给一个变量,用到这个变量的时候,它会顺着地址去找那个真正的对象
这就好比你的一栋房子,它是你的,你知道地址在哪,但是你不可能天天背着房子出门吧,所以你知知道这栋房子的地址,当你告诉别人你有房子的时候,你只是把地址告诉了那个人,你不可能直接把你的房子搬来给人家吧,面向对象是符合正常逻辑的,所以只是地址的复制(这里没写错,就是复制一次地址给变量)