【问题标题】:Java console displaying address of object rather than actual value [duplicate]Java控制台显示对象的地址而不是实际值[重复]
【发布时间】:2013-10-24 18:07:03
【问题描述】:

好的,我有一个简单的数组,我正在用 Java 处理它。问题是,当我运行程序时,我得到的是对象的地址而不是实际值。我也看到循环/数组有问题。它应该显示房屋 3、5 和 7,但底部显示的是 3,4 和 5。我哪里出错了?请参阅下面的代码和控制台输出。提前致谢!

House[] houses = new House[3];

houses[0] = new House(3,4);
houses[1] = new House(5,7);
houses[2] = new House(7,2);

System.out.println("Number of bottles in house number 3 is: " + houses[0]);
System.out.println("Number of bottles in house number 5 is: " + houses[1]);
System.out.println("Number of bottles in house number 7 is: " + houses[2]);

for (int i = 0; i < houses.length; i++){
  System.out.println("Number of bottles in house " + (i + 3 ) + " is " + houses[i]);
}

控制台输出:

3号楼的瓶子数量是:org.com1027.lab3.House@d16e5d6

5号房子的瓶子数量是:org.com1027.lab3.House@5a4b4b50

7号房子的瓶子数量是:org.com1027.lab3.House@53d9f80

房子 3 的瓶子数量是 org.com1027.lab3.House@d16e5d6

房子 4 的瓶子数量是 org.com1027.lab3.House@5a4b4b50

房子 5 的瓶子数量是 org.com1027.lab3.House@53d9f80

【问题讨论】:

  • House 类中实现toString() 方法。

标签: java arrays object


【解决方案1】:

Java 没有任何机制可以神奇地知道您的类应该如何以字符串格式表示。这就是为什么你必须自己实现它。

您需要重写 toString() 方法以获得“正确”值

class House {
 //your code

 @Override 
 public String toString() {
   return "The string representation";
 }

}

【讨论】:

  • 您需要添加方法定义并在您的类中实现。
【解决方案2】:

当您在示例中打印类似 house[0] 的实例时,您会看到 toString 方法的结果。如果在您的类 House toString 中没有被覆盖,您会看到默认实现,它显示实例的类名和对象 ID。因此,如果您想要一些自定义字符串表示您的 House 实例,您可以覆盖类 House 中的 toString() 方法。在那里你可以例如显示成员变量的值等。

您的 for 循环从 0 迭代到 2,因此您的 i 假定为 0,1,2,而您的 System.out 语句打印 i+3,结果为 3,4,5

【讨论】:

    【解决方案3】:

    在您的语句中,您将StringHouse 对象连接起来。因此,它将调用HousetoString() 方法并替换其结果。

    由于您可能没有覆盖此方法,因此它使用默认的toString() 方法,该方法打印类名和对象引用。

    只需在 House 类中覆盖 toString() 方法:

    public class House {
       // ...
    
       @Override
       public String toString() {
           return "House: "; // Customize it!
       }
    
       // ...
    }
    

    【讨论】:

      【解决方案4】:

      houses[0] 只是一个参考,而不是对象本身。只需点对象即可。所以,写:

      houses[0].getValues();
      
      public String getValues() { return "" + x + "" + y }
      

      或房屋对象的正确方法。

      【讨论】:

      • 当您将对象连接到字符串常量时,将调用 to string 方法。您不必调用它。
      • 我认为你是对的。所以他必须有一个正确的方法来返回值
      【解决方案5】:

      您想要的是在您的班级House 中覆盖toString()

      class House {
          // ... your implementation, 
          // which I'm guessing it's something like this:
          private int number;
          private int bottles;
      
          public House(int number, int bottles) {
              this.number = number;
              this.bottles = bottles;
          }
      
          // here you say what you want as output if you print a House, e.g.:
          @Override 
          public String toString() {
              return String.valueOf(bottles);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-02-09
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 2020-05-04
        • 2022-11-22
        相关资源
        最近更新 更多