这个问题在这里已有答案:
出于蓝色,我遇到了这个:
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
有人可以向我解释发生了什么事吗?我得到的值,这是一个对象的默认值,还是我错过了什么?
你必须在你正在打印的类中使用override
toString()
方法。
现在它正在打印Object
类toString()
方法的默认实现。
返回对象的字符串表示形式。通常,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()
这是您看到的 public class Demo{
----
@Override
public String toString() {
//return something
}
}
返回值
default Object的实现
toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
没有默认值,但其成员变量的默认值为Object
这是对象的默认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());
}
}
。但是,对象中的默认值由构造函数中的任何内容定义。我建议你更多地研究对象和类。
术语“对象的默认值”并不十分正确。对象不是默认的,引用是,它们默认为null
,如null
文档中所述。
您所看到的程序输出是由Data Types的默认实现返回的String
。当你调用toString()这就是PrintStream.println(Object)正在做的时候,System.out.println(demo)
需要转换传递的对象,在这种情况下你的PrimeStream对象转换为Demo
,它通过简单地调用它的String
方法来实现。
如果您没有在课程中覆盖toString(),那么您将获得默认行为。
您看到的值是内存中的对象地址,值不同的事实表明它不是同一个对象。如果要更改出来的内容,请覆盖.toString()方法。
实际上默认情况下,对象的toString()方法返回toString
。要打印所需的输出,您必须覆盖someObjectClassname@hashcodenumber
方法