Java中的几个Object 类:其他的类都是直接或简洁继承这几个。该类中有几种主要方法:
可以重写:
1. equals()
2. hashCode()
3. toString()
8. clone()
不可重写:(被final 修饰)
4. wait()
5. notify()
6. notifyAll()
7. finalize()
9. getClass() getClass().getName()
API中的解释就是,返回该对象的字符串表示。
private void toStringTest(){
Pikachu a = new ObjectTest().new Pikachu("ABC");
Pikachu b = new ObjectTest().new Pikachu("ABC");
System.out.println(a.toString());
System.out.println(b.toString());
}
但是:输出结果形如类名+对象内存地址:
com.loongshawn.ObjectTest$Pikachu@5e2de80c
com.loongshawn.ObjectTest$Pikachu@1d44bcfa
期望的是:如果本意是想输出这个对象的名字呢,则需要在自定义的类Pikachu中重写toString()方法,如下:
private class Pikachu{
private String name;
private Pikachu(String name){
this.name = name;
}
public String toString(){
return name;
}
}
输出结果如下:
ABC
ABC
Object 类的几个方法的重写。
package thread;
import java.util.*;
public class ObjectInstances {
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println(new ObjectInstances());
String s1 = "123";
String s2 = "123";
System.out.println(s1.equals(s2));
V v1 = new V("1");
V v2 = new V("1");
System.out.println(v1.equals(v2));
V v3 = new V("12");
V v4 = new V("2");
Collection c = new HashSet();
c.add(v3);
c.add(v4);
System.out.println(v3.equals(v4));
System.out.println(v3.hashCode());
System.out.println(v4.hashCode());
TreeSet c1 = new TreeSet();
c1.add(1);
c1.add(2);
Iterator iter = c1.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
/*toString()方法;
可重写;如果在实际使用中为特定对象提供一个特定的输出模式,当这个类型转换为字符串
或字符串连接时,建自动调用重写的toString()方法。*/
public String toString(){
return "重写方法"+getClass().getName();
}
/*从本例可以看出,在自定义的类中使用equals()方法进行比较时,
* 将返回false,因为equals方法的默认实现是"=="运算符,
* 即比较两个对象的引用地址,而不是比较对象的内容。
* 所以要想真正比较两个对象中的内容,需要在自定义类中重写equals()方法。*/
}
class V {
private String val;
public V(String val){
this.val = val;
}
public String tostring(){
return this.val;
}
public boolean equals(Object o1){
if(o1 instanceof V){
V v =(V) o1;
System.out.println("equal:"+v.val);
return (val.equals(v.val));
}
return super.equals(o1);
}
public int hashCode(){
V v = (V) this;
System.out.println("hash:"+v.val);
return val.hashCode();
}
}