-2

Quick question:

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;
    }
}

OUTPUT: javahello.Person@2c538cc2

Reason behind this? Does not print JavaOracle

OPK
  • 4,120
  • 6
  • 36
  • 66

3 Answers3

12

You need to implement toString in class Person:

public class Person {

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

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

}

toString must return a String representation of the object. Utility methods such as append invoke toString on an object to retrieve its textual representation.

From the docs:

Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())
Tobias
  • 7,723
  • 1
  • 27
  • 44
0

Add a toString method to the Person class.

package hello;
public class Person {

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

    public String toString() {
      return name;
    }
}
Nicola Ferraro
  • 4,051
  • 5
  • 28
  • 60
0

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

results into

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

Since your Person class does not override toString() method from Object class, it uses the default implementation which is to print getClass().getName() + '@' + Integer.toHexString(hashCode()).

To print javaOracle, you need to override the toString() method as

public class Person {

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

    public String toString() {
        return name;
    }
}
devang
  • 5,376
  • 7
  • 34
  • 49