【问题标题】:Java toString Method (objects)Java toString 方法(对象)
【发布时间】:2010-10-13 04:45:42
【问题描述】:
class Position {

    private double x,y;
    private int id;

    public String toString(Position a){

        String words ="(" + a.x + "," +a.y + ")";
        return words;

所以我在这里返回了一个内存地址。我究竟做错了什么?我想获取使用 setter 设置的 x 和 y 的实际值。我也有吸气剂,我尝试不放 a.x 放 getX(),但这仍然给了我另一个内存地址。我做错了什么?

【问题讨论】:

    标签: java string object


    【解决方案1】:

    试试:

    public String toString(){
    

    您拥有的代码是添加一个新方法,而不是覆盖Object 的现有无参数toString 方法。这意味着旧方法仍然是被调用的方法,它会提供您所看到的输出。

    【讨论】:

    • 好吧,成功了,但我还是不明白为什么它不带任何参数?
    • Object.toString() 不带任何参数,因此您编写的覆盖它的方法不能。考虑一下:public String toString(Position a){ return "(" + a.x + "," +a.y + ")"; } public String toString(){ return toString(this); }
    • @fprime:该函数是Position 类的方法。当您调用一个方法时,this 指向您调用该函数的实例。如果你有例如Position p = new Position(); p.toString(); toString 方法作用于 p - 所以不需要传递一个 Position 实例。
    • 不仅仅是名称,方法的参数类型,参数数量,顺序等都是它签名的一部分download.oracle.com/javase/tutorial/java/IandI/override.html
    【解决方案2】:

    你实际上并没有覆盖toString;相反,您通过定义具有相同名称但需要不同参数的方法来重载它。您不会将Position 传递给toString;它应该引用当前实例。

    【讨论】:

      【解决方案3】:

      作为对其他帖子的补充,您为什么认为您需要将Position 的引用传递给方法toString(),无论如何。毕竟,该方法存在于同一个类中,Position。您可以直接使用变量/属性,而无需像这样的任何引用。

        public String toString(){
              return "(" + x + "," + y + ")";
        }
      

      或者如果你想特别有一个参考,那么你可以这样做,

        public String toString(){
              return "(" + this.x + "," + this.y + ")";
        }
      

      我在重构后将方法变成了一条线。

      如果您有兴趣了解人们更喜欢哪个版本,请参考here, when to use this。这是how overriding works in Java上的教程/说明。

      【讨论】:

        【解决方案4】:

        由于这是一项家庭作业,我会要求您逐步调试器。即使您希望它这样做,您的方法也不会被调用。 ( toString() 和 toString(Someobject ) 是不同的。

        【讨论】:

          猜你喜欢
          • 2016-02-20
          • 1970-01-01
          • 2020-10-08
          • 2022-12-03
          • 1970-01-01
          • 1970-01-01
          • 2014-03-31
          • 2018-01-10
          • 1970-01-01
          相关资源
          最近更新 更多