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)
,该对象具有一个成员变量,该成员变量是对String->“ Sally”的引用,为什么当我执行
System.out.println(c.name)
时,尝试打印出引用(名称),却给出了一个真实的String对象(“ Sally”)。它不应该打印实际对象(“ Sally”)的内存地址吗???? 最佳答案
注意:println()
是System
类中的重载方法。您打电话的时候
Customer c = new Customer("Sally");
System.out.println(c);
这将调用以对象为参数的
println()
方法。如果引用documentation,您将看到以下内容:public void println(Object x)
打印
Object
,然后终止该行。此方法调用首先
String.valueOf(x)
获取打印对象的字符串值,然后行为就像先调用
print(String)
然后调用println()
一样。参数:
x-要打印的对象。
当您调用
println(c.name)
时,name
是一个String
变量,这将调用以println()
为参数的String
方法:System.out.println(c.name);
在documentation中:
打印
public void println(String x)
打印
String
,然后终止该行。此方法的行为如下尽管它先调用
print(String)
,然后调用println()
。参数:
x-要打印的字符串。
另请参考以下内容:q1和this q2。