【问题标题】:StringBuilder in Java [duplicate]Java中的StringBuilder [重复]
【发布时间】:2014-12-23 18:48:54
【问题描述】:

快速提问:

public class AppendStringBuilder {

    public static void main(String args[]){
        StringBuilder sb1 = new StringBuilder();
        sb1.append("java");
        sb1.append(new Person("Oracle"));
        System.out.println(sb1);
    }
}

package hello;
public class Person {

    String name;
    Person(String str){
        name = str;
    }
}

输出: javahello.Person@2c538cc2

这背后的原因是什么?不打印 JavaOracle

【问题讨论】:

  • 为什么会打印JavaOracle

标签: java stringbuilder


【解决方案1】:

你需要在Person类中实现toString

public class Person {

    String name;
    Person(String str){
        name = str;
    }

    @Override
    public String toString() {
      return name;
    }

}

toString 必须返回对象的字符串表示形式。 append 等实用方法在对象上调用 toString 以检索其文本表示。

来自the docs

返回对象的字符串表示形式。一般来说, toString 方法返回一个“以文本形式表示”的字符串 目的。结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类覆盖此方法。

Object 类的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,at 符号 字符“@”和哈希的无符号十六进制表示 对象的代码。换句话说,这个方法返回一个字符串等于 值:

getClass().getName() + '@' + Integer.toHexString(hashCode())

【讨论】:

    【解决方案2】:

    向 Person 类添加一个 toString 方法。

    package hello;
    public class Person {
    
        String name;
        Person(String str){
            name = str;
        }
    
        public String toString() {
          return name;
        }
    }
    

    【讨论】:

      【解决方案3】:

      sb1.append(new Person("Oracle"));

      结果

      sb1.append(new Person("Oracle").toString());

      由于您的Person 类没有覆盖Object 类中的toString() 方法,它使用默认实现,即打印getClass().getName() + '@' + Integer.toHexString(hashCode())

      要打印javaOracle,需要重写toString()方法为

      public class Person {
      
          String name;
          Person(String str){
              name = str;
          }
      
          public String toString() {
              return name;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 2017-05-04
        • 2011-06-06
        • 2014-02-19
        • 2019-03-09
        • 2015-12-13
        • 1970-01-01
        相关资源
        最近更新 更多