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
java - Java_为什么打印成员变量给出实际值?-LMLPHP



,该对象具有一个成员变量,该成员变量是对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-要打印的字符串。


另请参考以下内容:q1this q2

09-29 19:42
查看更多