java中'对象'的默认值是什么?

时间:2013-12-13 16:47:13

标签: java object default-value

出乎意料的是,我遇到了这个:

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);
    }
}

我执行代码时得到的奇怪输出是:

  

演示@ 6e1408

     

演示@ e53108

或者

  

演示@ 1888759

     

演示@ 6e1408

有人可以向我解释发生了什么事吗? 我得到的值,这是一个对象的默认值,还是我错过了什么?

6 个答案:

答案 0 :(得分:3)

您看到的toString()返回值

默认对象的实现

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

Object没有默认值,但其成员变量的默认值为based on its type

答案 1 :(得分:1)

您要打印的班级必须override toString()方法。

现在它正在打印ObjecttoString()方法的默认实现。

From Object class Source code

  

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

     

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

Returns:
a string representation of the object.


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

所以在你的演示类Ovveride toString()方法中获得所需的O / P.

    public class Demo{

    ----

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

答案 2 :(得分: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。但是,对象中的默认值由构造函数中的任何内容定义。我建议你更多地研究对象和类。

答案 3 :(得分:0)

您看到的值是内存中的对象地址,值不同的事实表明它不是同一个对象。如果要更改出来的内容,请覆盖.toString()方法。

答案 4 :(得分:0)

实际上默认情况下,对象的toString方法返回someObjectClassname@hashcodenumber。要打印所需的输出,您必须覆盖toString方法

答案 5 :(得分:0)

术语“对象的默认值”并不十分正确。对象不是默认值,引用是,并且它们默认为null,如Data Types上的文档中所述。

您看到的程序输出是toString()的默认实现返回的String。当您致电PrintStream.println(Object) System.out.println(demo)时,PrimeStream需要转换传递的对象,在这种情况下,您的Demo对象转换为String ,只需调用其toString()方法即可。

如果您未在课程中覆盖toString(),则会获得默认行为。