java 的默许构造方法
java 的默认构造方法
请问下面的代码为什么会输出
debug.Foo@659e0bfd //为什么会输出这一行东西,默认构造方法都会输出这串东西吗?
谢谢了
------解决思路----------------------
就你贴出来的代码来说,应该是输出一个空行而已。你遇到的问题,应该是写成了这样:System.out.println(foo);
至于为什么是那一串,是因为System.out.println(foo);语句自动调用了foo的toString()方法,这个方法继承自Object类,具体的实现我忘了,反正后面那串码你可以当作对象的身份证号来理解。
------解决思路----------------------
Object类的toString方法如下:
public String toString() {
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
你打印的foo的toString()方法,也就是Foo的父类Object的toString()方法
------解决思路----------------------
原型不就是
这个对象的hashcode嘛。。
hashCode 你可以重写的嘛。。
Object 的hashCode怎么实现的,就不知道了。调用的是native
看不见源码
------解决思路----------------------
Object的hashCode()是以对象地址计算的,它的原型就是对象的地址(但并不代表hashCode返回的值就是对象的内存地址,因为hashCode应该还进行了一次运算)
而Object的toString()方法是用运行时类名+@+16进制的hashCode
请问下面的代码为什么会输出
debug.Foo@659e0bfd //为什么会输出这一行东西,默认构造方法都会输出这串东西吗?
package debug;
public class Doo6 {
public static void main(String[] args) {
Foo foo = new Foo();
System.out.println();
}
}
class Foo{
}
谢谢了
------解决思路----------------------
就你贴出来的代码来说,应该是输出一个空行而已。你遇到的问题,应该是写成了这样:System.out.println(foo);
至于为什么是那一串,是因为System.out.println(foo);语句自动调用了foo的toString()方法,这个方法继承自Object类,具体的实现我忘了,反正后面那串码你可以当作对象的身份证号来理解。
------解决思路----------------------
Object类的toString方法如下:
public String toString() {
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
你打印的foo的toString()方法,也就是Foo的父类Object的toString()方法
------解决思路----------------------
原型不就是
这个对象的hashcode嘛。。
hashCode 你可以重写的嘛。。
Object 的hashCode怎么实现的,就不知道了。调用的是native
看不见源码
------解决思路----------------------
Object的hashCode()是以对象地址计算的,它的原型就是对象的地址(但并不代表hashCode返回的值就是对象的内存地址,因为hashCode应该还进行了一次运算)
而Object的toString()方法是用运行时类名+@+16进制的hashCode