Java中“object”的默认值是什么?

3

突然间,我看到了这个:

public class demo {
    void multiply(){
       System.out.println("HELLO WORLD!")
       }
}

public static void main(String args[]){
        demo e=new demo();
        demo e1=new demo();
        System.out.println(e);
        System.out.println(e1);
    }
}

执行代码后我得到了奇怪的输出结果:

demo@6e1408

demo@e53108

或者

demo@1888759

demo@6e1408

请问有人能解释一下这是什么情况吗?我得到的值是对象的默认值还是我漏掉了什么?

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Object.java#Object.toString%28%29 - sp00m
请查看这个问题,以了解正在发生的事情,而不仅仅是一个解决方案。 - Paul Samsotha
6个回答

3

您看到的是toString()返回的值

默认对象的实现

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

对于一个Object,它没有默认值,但是它的成员变量根据类型有默认值。具体请参考数据类型


2

您需要在打印类的时候覆盖toString()方法。

现在默认使用Object类的toString()方法进行打印。

来自Object类源代码

返回对象的字符串表示形式。一般来说,toString方法返回一个表示该对象的文本字符串。结果应该是简洁但信息丰富的,易于让人阅读。推荐所有子类都覆盖此方法。

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

Returns:
a string representation of the object.


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

因此,在您的演示类中,重写 toString() 方法以获取所需的输出。

    public class Demo{

    ----

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

1
这是对象默认 toString() 方法的输出结果,它会打印出类名和哈希码。你可以通过在要输出的对象的类中重写 toString() 方法来改变此输出结果。然而,与其直接打印对象本身,你需要在对象上调用 toString() 方法。例如:
public class demo{

    void multiply(){
        System.out.println("HELLO WORLD!")
    }

    public String toString() {
        return "This is the class, demo.";
    }


    public static void main(String args[]){
        demo e=new demo();
        demo e1=new demo();
        System.out.println(e.toString());
        System.out.println(e1.toString());
    }
}
P.S: 当对象未初始化时,其“默认值”为null。但是,对象内部的默认值由构造函数中的内容定义。建议您进一步了解对象和类。

1
“对象的默认值”这个术语并不完全正确。对象本身没有默认值,只有引用类型才有默认值,并且它们的默认值是null,如数据类型文档中所述。
你的程序输出的是默认实现toString()返回的String。当你调用PrintStream.println(Object)时,也就是System.out.println(demo)在做的事情,PrimeStream需要将传递的对象转换为String,在这种情况下是你的Demo对象,它通过简单地调用其toString()方法来完成。
如果你没有在类中重写toString(),则会得到默认行为。

0
您看到的值是对象在内存中的地址,不同的值表明它们不是同一个对象。如果您想更改输出结果,请覆盖 .toString() 方法。

0

实际上,默认情况下,一个对象的toString方法返回someObjectClassname@hashcodenumber。要打印您想要的输出,您必须重写toString方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接