如果我用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());
}
}
答案 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