负责对象克隆的。
Protected Object clone();
获取对象哈希值的一个方法
int hashCode();
判断两个对象是否相等
Boolean equals(Object obj);
将对象转换成字符串形式
String toString();
垃圾回收器负责调用的方法
protrcted void finalize();
toString
关于Object
中的toString
方法
-
源代码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
源码上toString
方法的默认实现是:
类名@对象的内存地址转换为十六进制的形式
-
SUN公司设计toString
方法的目的是什么?作用是什么?
toString
方法的设计目的是:通过调用这个方法可以将一个Java对象转换成字符串表示形式
-
SUN公司开发Java语言的时候,建议所有的子类都去重写toString
方法。toString
方法应该是一个简洁的、详实的、易阅读的。
-
输出一个引用时,会自动调用该引用的toString
方法
*打印引用时,例如有个引用a
System.out.println(a);
由于每个类都默认继承了Object
对象,println
底层使用了多态: PrintStream.class
public void println(Object x) {
String s = String.valueOf(x);
...
}
可见println
源码调用了String.valueOf()
: String.class
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
obj.toString()
由此可见,只要obj是一个Object
类型,那么就一定有toString()
方法,而所有class
,都默认继承了Object
equals
关于Object
中的equals
方法
-
equals
源码
public boolean equals(Object obj) {
return (this == obj);
}
以上是equals
方法的默认实现
-
SUN公司设计equals
方法的目的是什么?
-
以后编程当中,都要通过equals
方法来判断两个对象是否相等。equals
方法是判断两个对象是否相等的。
-
判断两个java对象是否相等,不能使用“==”,因为这比较的是两个对象的内存地址。例如:
B b = new B(2, 3);
B b2 = new B(2, 3);
if (b == b2)// false
在Object
中的equals
方法采用的是“==”来判断两个对象是否相等。需要判断的是两个对象的内容是否相等,所以java默认的equals
无法实现需求,所以需要重写equals
。如何去重写这个equals
需要按照你当前的需求来进行重写,例如比较id
是否相等:
class B {
public int id;
public B(int id){
this.id = id;
}
public boolean equals(Object obj){
if (this instanceof obj && obj != null){
return (this.id == ((B)obj).id);
}
return false;
}
}
B b = new B(2);
B b2 = new B(2);
b.equals(b2); // true
Java中基本数据类型可以使用"=="来进行判断
Java中引用数据类型统一使用equals
方法来进行判断
String 类中已重写equals
方法
finalize
关于Object类中的finalize方法。
-
在Object类中的源代码
protected void finalize() throws Throwable { }
-
finalize
方法只有一个方法体,里面没有任何代码,而且这个方法是protected修饰的。
-
这个方法不需要手动调用,JVM的垃圾回收器负责调用这个方法。
-
finalize方法执行时:
当一个Java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize方法。
-
finalize方法实际上是一SUN公司为java程序员准备的一个时机,垃圾销毁机。如果希望在对象销毁时执行一段代码的话,这段代码要写到finalize方法。
-
Java中的垃圾回收器是不轻易启动的,垃圾太少或者时间没到,种种条件下,有可能启动,也有可能不启动。
可使用System.gc
();方法建议垃圾回收器启动