6

这个节目

public class HelloWorld{
    public void testFunc(){
        System.out.println("Class = "+this);
    }

    public static void main(String[] args){
        HelloWorld hw = new HelloWorld();
        System.out.println("Hello, World");
        hw.testFunc();
    }
}  

给我这个输出:

Hello, World
Class = HelloWorld@7c6768

@7c6768第二行HelloWorld之后是什么意思?

4

9 回答 9

13

对象的toString()实现如下:

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

由于您的HelloWorld类没有覆盖它,因此这是调用的方法。

于 2013-07-26T10:03:57.500 回答
9

toString()方法返回对象的字符串表示形式。

通常,该toString()方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。

toString方法返回一个字符串,该class Object字符串由对象作为实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
于 2013-07-26T10:03:52.283 回答
7

根据 Object 类中 toString() 方法的文档

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

什么时候

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

当您在对象上调用 toString() 时,如果您像下面这样ovveride,您将获得自己的实现

 @Override
  public String toString() {
     //return something 
  }

否则给出你现在看到的默认实现

来自 Object 类 源代码

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())

Returns:
a string representation of the object.


    public String  toString() {
         return getClass().getName() + "@" + Integer.toHexString(hashCode());
     }
于 2013-07-26T10:03:30.073 回答
3

从 API:

类 Object 的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成

于 2013-07-26T10:03:25.987 回答
3

HelloWorld@7c6768 是当前对象的字符串表示,@7c6768 是哈希码。实际上,您正在调用当前对象的 toString()

这是 toString() 的 java 文档http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#toString()

于 2013-07-26T10:07:10.793 回答
3

如果您在 Object 类中看到 toString() 方法

/**
 * Returns a string representation of the object. In general, the
 * {@code 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.
 * <p>
 * The {@code toString} method for class {@code Object}
 * returns a string consisting of the name of the class of which the
 * object is an instance, the at-sign character `{@code @}', 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:
 * <blockquote>
 * <pre>
 * getClass().getName() + '@' + Integer.toHexString(hashCode())
 * </pre></blockquote>
 *
 * @return  a string representation of the object.
 */
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

它返回类名,后跟其哈希码。那就是你得到的数字。

于 2013-07-26T10:07:25.617 回答
2

那就是this.hashCode()。由于您没有重新定义hashCode(),因此该数字是 JVM 中存储对象的内存地址。

于 2013-07-26T10:03:12.950 回答
2

查看 Objects 的 toString() 方法:

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

它是对象的哈希值。

于 2013-07-26T10:04:53.350 回答
2

唯一标识对象的编号。它是哈希码的十六进制表示。简单来说,打印的整个 String 就是实例化类后返回的引用。

于 2013-07-26T10:05:34.223 回答