【问题标题】:How to print name of object?如何打印对象的名称?
【发布时间】:2019-11-15 22:52:29
【问题描述】:

我应该更改什么来打印椅子的名称,即chairNumber1

public class Employee {                                                                                         
    private Chair s;                                                                                            

    Employee(Chair s) {                                                                                         
        this.s = s;                                                                                             
    }                                                                                                           

    void showData() {                                                                                           
        System.out.println("Name of chair : " + s);                                                             
    }                                                                                                           
}                                                                                                               

public class Chair {                                                                                            

}                                                                                                               

public class Hlavna {                                                                                           
    public static void main(String[] args) {                                                                    
        Chair s = new Chair("chairNumber1");                                                                    
        Employee c1 = new Employee(s);                                                                          
        c1.showData();                                                                                          
    }                                                                                                           
}  

为什么当我想打印Chair 的名称时,即chairNumber1,Java 在控制台上打印chairNumber1 的地址,而不是它的名称?

【问题讨论】:

  • 这是无效代码,您能否编辑您的问题并更新示例?

标签: java object printing


【解决方案1】:

您必须已经知道,Java 中的每个类都默认继承一个名为Object 的类。 This class 有一个方法toString(),它返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。

当您使用System.out.println("Name of chair : " + s); 时,它会调用s.toString(),但由于您没有在class Chair 中提供自己的toString() 实现,它将调用class ObjecttoString() 方法,即class Chair 的默认超类。这就是为什么您看到您认为的值是chairNumber1 的地址。

要获得所需的String,您需要重写toString() 方法,例如:

public class Chair {
    private String name;
    public Chair(String name) {
        this.name = name;
    }
    public String toString() {
        return name;
    }
}

【讨论】:

    【解决方案2】:

    在您的椅子类中定义一个返回名称或覆盖 toString 方法的方法。

    示例:

    public class Chair{
    
      private String chairName;
    
      Chair(String chairName){
        this.chairName = chairName;
      }
    
      public String toString(){
        return chairName;
      }
    }
    

    现在在 showdata() 内部调用 toString():

    void showData(){
      System.out.println("Name of chair : " + s.toString());
    }
    

    【讨论】:

      【解决方案3】:

      这里发生了几件事。

      您已经在 Hlavna 类的 main 方法中创建了一个椅子对象。您已经为这个 Chair 对象提供了一个参数,尽管从上面的代码中 Chair 没有接受一个参数。

      就像你让 Employee 类接受一个椅子的参数一样,你应该让椅子接受一个名字的参数,像这样:

      public class Chair
      {
          private String name;
      
          Chair(String chairName)
          {
              this.name = chairName;
          }
      }
      

      现在这还不够。当您打印任何 Java 对象时,真正发生的是调用对象的 toString 方法。默认情况下,这会打印对象的地址,但您可以通过自己实现该方法来覆盖它,如下所示:

      public class Chair
      {
          private String name;
      
          Chair(String chairName)
          {
              this.name = chairName;
          }
      
          public String toString()
          {
              return this.name;
          }
      }
      

      现在,当您打印椅子对象时,它会调用椅子对象的 toString 实现,这里返回椅子的名称。

      您的员工类正确地打印了您在构造它时传递给它的椅子的“toString()”方法,但目前它看起来像一个地址。如果您将 Chair 对象更改为上述代码,则会打印出您所追求的椅子名称。

      完整的代码如下所示:

      public class Employee    
      {
          private Chair s;
      
          Employee(Chair s)
          {
              this.s = s;
          }
      
          void showData()    
          {   
              System.out.println("Name of chair : " + s);   
          }
      }
      
      public class Chair
      {
          private String name;
      
          Chair(String chairName)
          {
              this.name = chairName;
          }
      
          public String toString()
          {
              return this.name;
          }
      }
      
      
      public class Hlavna
      {
          public static void main(String[] args)
          {
              Chair s = new Chair("chairNumber1");
              Employee c1 = new Employee(s);
              c1.showData();
          }
      }
      

      【讨论】:

        【解决方案4】:
        public class Chair {
            private String name;
        
            public Chair(String name) {
                this.name = name;
            }
        
            @Override
            String toString() {
                return name;
            }
        }
        

        【讨论】:

        • 您应该对您的代码添加一些解释,以帮助 OP 理解为什么它可以解决他的问题。另外,我看不出您的答案如何添加了该问题的其他答案中尚未提供的任何内容。
        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 2023-02-25
        相关资源
        最近更新 更多