toString:何时返回ClassName @ HexValue,与之关联的字符串值

时间:2013-09-03 12:49:21

标签: java tostring

根据定义toString()返回“将对象的字符串表示形式返回为:

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

但有时我甚至可以看到它在我们的类中不是Overriden,它返回与之关联的String。我的意思是Object.toString()返回一些字符串但不是“ClassName@HexCode”。

这是什么时候发生的。请让我知道这背后的原因是什么?

2 个答案:

答案 0 :(得分:4)

只有当一个类使用override(或继承的重写)toString()扩展另一个类时才有可能。

答案 1 :(得分:1)

toString()的默认行为是将对象返回为

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

但是如果在基类或子类中重写toString(),则可以指定对象的打印方式。

可能在你的情况下,它使用你的基类的继承方法。

例如:

class Person {
    private String myName; // name of the person
    private int myAge; // person's age
    private String myGender; // 'M' for male, 'F' for female

    // constructor
    public Person(String name, int age, String gender) {
        myName = name;
        myAge = age;
        myGender = gender;
    }

    public String getName() {
        return myName;
    }

    public int getAge() {
        return myAge;
    }

    public String getGender() {
        return myGender;
    }

    public void setName(String name) {
        myName = name;
    }

    public void setAge(int age) {
        myAge = age;
    }

    public void setGender(String gender) {
        myGender = gender;
    }

    public String toString() {
        return myName + ", age: " + myAge + ", gender: " + myGender;
    }
 }
 public class Teacher extends Person {
 //...
 }

 calling `toString();` method will call inherited `tOString()` method of base class and will return `return myName + ", age: " + myAge + ", gender: " + myGender;`