toString default和Overriden toString冲突

时间:2014-02-18 01:36:00

标签: java

如果我用toString的实际覆盖覆盖它,它会提供与默认的toString实现相比不同的结果。请帮助我理解为什么会出现不同的结果。

@Override
public String toString()
{
    return getClass().getName()+"@"+Integer.toHexString(hashCode());
}

以上输出:

leo.test.Teste@addbf1

默认输出

leo.test.Teste@19821f

整个代码:

public class Teste 
{
    public  static void main(String args[])
    {
        Teste t = new Teste();
        System.out.println(t);      
    }
    @Override
    public String toString()
    {
        return getClass().getName()+"@"+Integer.toHexString(hashCode());
    }
}

1 个答案:

答案 0 :(得分:3)

我认为您的问题是hashCode()的默认实现,may be based on the adress of the object。因此,如果您测试两次(一次使用覆盖方法,一次不使用),则可能会有不同的结果。

如果您这样尝试:

public class TestToString {
    public static void main(String[] args) {
        TestToString tts = new TestToString ();
        System.out.println(tts);
        System.out.println(tts.superToString());
    }

    public String superToString()
    {
        return super.toString ();
    }

    @Override
    public String toString()
    {
        return getClass().getName()+"@"+Integer.toHexString(hashCode());
    }
}

这两种方法的结果相同:

com.test.TestToString@8dc8569
com.test.TestToString@8dc8569