【发布时间】:2017-11-08 17:25:26
【问题描述】:
class Customer {
public String name;
public Customer(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Customer c = new Customer("Sally");
System.out.println(c);
System.out.println(c.name);
}
}
- 这是一个简单的问题,我们都知道输出结果,但有一个问题
请看上面的代码和这里的图片Passing Value
-
问题:
- 如果我打印出这样一个对象的引用:
System.out.println(c);,IDE 将为我生成一个内存地址:Customer@60e53b93 - 但是,在视频教程中(截图见图片链接Passing Value)
- 如果我打印出这样一个对象的引用:
,该对象有一个成员变量,它是一个字符串的 reference -> "Sally",为什么当我执行 System.out.println(c.name) 时,试图打印出一个 reference(name),它给出了一个真正的字符串对象t("Sally")。 不应该打印一个真正的Object("Sally")的内存地址吗???
【问题讨论】:
-
这个Customer@60e53b93和内存无关,只是对象的hashcode
-
没有。它在哪里说应该?视频教程的图片不足以证明您的信念,或者可以作为此处帖子的一部分。
-
不,如果您的 Customer 类有一个 toString() 方法,它会使用它。
-
我知道兄弟,但是,我想说的是我正在打印一个对真实对象的 reference,为什么它会给出一个字符串对象“Sally”,只是比如,打印一个对象客户的reference,它会给出一个内存地址...
-
@EJP 对不起兄弟,我只是想弄清楚堆栈和堆的实际工作原理,这就是我在 YTB 上搜索视频的原因
标签: java object memory memory-management heap-memory