java中'对象'的默认值是什么? [重复]

问题描述 投票:3回答:6

出于蓝色,我遇到了这个:

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

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

java object default-value
6个回答
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());
     }

所以在你的演示类中覆盖qazxsw poi方法以获得所需的O / P.

toString()

3
投票

这是您看到的 public class Demo{ ---- @Override public String toString() { //return something } } 返回值

default Object的实现

toString()

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 没有默认值,但其成员变量的默认值为Object


1
投票

这是对象的默认based on its type方法的结果,该方法打印出类名和哈希码。实际上,您可以通过覆盖要打印的对象类中的toString()方法来更改此值。但是,您不必打印对象本身,而是必须在对象上调用toString()。例如:

toString()

P.S:当对象未初始化时,对象的“默认值”是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()); } } 。但是,对象中的默认值由构造函数中的任何内容定义。我建议你更多地研究对象和类。


1
投票

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

您所看到的程序输出是由Data Types的默认实现返回的String。当你调用toString()这就是PrintStream.println(Object)正在做的时候,System.out.println(demo)需要转换传递的对象,在这种情况下你的PrimeStream对象转换为Demo,它通过简单地调用它的String方法来实现。

如果您没有在课程中覆盖toString(),那么您将获得默认行为。


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.