【问题标题】:Clarification about the toString method within an ADT class关于 ADT 类中的 toString 方法的说明
【发布时间】:2013-08-24 12:30:31
【问题描述】:

这是我试图实现的 Complex ADT 类中修改后的 toString 函数(我的怀疑只是关于这个函数,所以我没有包括之前声明的私有变量和其他函数):

class ComplexCart implements Complex{
  public String toString(){
    if(image == 0) return (real + "");
  }
}

为什么我们不能写以下内容?

if(imag == 0) return(real);

为什么我们需要添加额外的 ""

【问题讨论】:

    标签: java tostring


    【解决方案1】:

    因为返回类型是String,而real是整数类型。或者你可以使用real.toString()

    【讨论】:

      【解决方案2】:

      由于real 是int 类型,而toString() 方法期望String 返回。所以您需要在此处添加""
      + 是字符串连接运算符。

      【讨论】:

        【解决方案3】:
         public String toString(){
            if(image == 0) return (real + "");
          }
        

        在上面的代码中,如果real 不是String 类型,它就是compile time error

        如果它的类型是String。没有错误发生。

        要将real 设为string,您正在编写real + "".

        那么,直接的问题是那么它是如何与+ "" 一起工作的??

        这里是Docs of String

        Java 语言为字符串连接运算符 ( + ) 以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换通过toString方法实现,由Object定义,Java中所有类都继承。

        附注:

        用字符串连接是个坏主意。有一些相同的更好的方法。

        1)Integer.toString(intval);
        2)String.valueOf(intval);
        

        【讨论】:

        • 非常感谢!real 是“int”类型。
        • 您链接的不是语言规范,而是String 类的文档。
        • @arshajii 谢谢,更新:)
        【解决方案4】:

        这是因为你必须从toString() 返回一个String,并且大概real 不是Stringreal + "" 执行字符串连接(将real 转换为String 并将其与空字符串连接;请参阅JLS §15.18.1)并生成String,这就是您可以有效返回它的原因。

        请注意,您应该考虑使用Integer.toString(real) 之类的东西而不是real + ""(请参阅Integer.toString())。

        【讨论】:

        • 感谢@arshajii 的回答!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多