在java中,如果不用关键字extends显式地指出类的父类,那么父类就是Object类。所有的类都有一个公共的父类Object。Object类是java中唯一一个没有父类的类,是java最顶层的父类。
(1)equals()方法
Object类提供的equals()方法默认是比较地址的,并不能对内容进行比较,所以自定义的类如果要比较内容需要覆盖Object类的equals()方法。
equals()方法和运算符“==”都可以用于判断是否相等,均返回boolean值,两者的区别如下:
- 使用范围不同
运算符“==”可以不交基本数据类型,也可以比较引用数据类型;而equals()方法只能比较引用数据类型
- 运算符“==”的功能
比较基本数据类型时是比较数值是否相等;比较引用数据类型时是比较两个引用的值,即地址是否相等。
- 方法equals()的功能
比较两个引用的值,即地址是否相等。很多子类中的equals()方法覆盖了Object类的equals()方法,改变了方法的功能。
public class Peoples {
private String name;
public Peoples(String name){
this.name=name;
}
public void fun(){
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Peoples p=(Peoples) obj;
return name==p.name;
}
public static void main(String[] args){
Peoples p=new Peoples("zs");
Peoples p1=new Peoples("zs");
String str="hello";
System.out.println(p.equals(p1));
}
}
(2)hashCode()方法
该方法返回的是对象的哈希码。哈希码是一个代表对象的整数,在程序的运行期间,每次调用同一个对象的hashCode()方法,返回的哈希码必定是相同的;但是多次执行同一个程序,程序的一次执行和下一次执行期间,同一个对象的哈希码不一定相同。实际上,默认的哈希码是将对象的内存地址通过某种转换得到的,所以不同对象会有不同的哈希码。
public class Peoples {
private String name;
public Peoples(String name){
this.name=name;
}
public void fun(){
}
public static void main(String[] args){
Peoples p=new Peoples("zs");
Peoples p1=new Peoples("zs");
String str="hello";
System.out.println(str.hashCode());
}
}
(3)toString()方法
Object类的toString()方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
返回该对象的字符串表示。通常,toString()方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
(4)instanceof方法
判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类;它的返回值是布尔型的
public class Peoples{
private String name;
public Peoples(String name){
this.name=name;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Peoples){
Peoples p=(Peoples) obj;
return name==p.name;
}
return false;
}
public static void main(String[] args){
Peoples p=new Peoples("zs");
Peoples p1=new Peoples("zs");
String str="hello";
System.out.println(p.equals(p1));
}
}
(5)getClass()方法
获得类的信息
public class Peoples{
public static void main(String[] args) {
Peoples t=new Peoples();
System.out.println(t.getClass().getName());
System.out.println(t.getClass().getSuperclass());
}
}
(6)clone方法
返回的是Object类,是继承类型的修饰符
class Cat implements Cloneable{
String catName;
public Cat(String name){
catName=name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}class Dog implements Cloneable{
String dogName;
Cat c;
public Dog(String name){
dogName=name;
c=new Cat("cc");
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Cat temp = (Cat) c.clone();//拷贝Cat里的基本数据类型,String
Dog d =(Dog) super.clone();//拷贝Dog里的基本数据类型以及String,引用数据变量
d.c=temp;
return d;
}
}
public class Peoples{
public static void main(String[] args){
Dog d1=new Dog("aa");
Dog d2=new Dog("bb");//"aa"
// System.out.println(d1);//打印出来的是地址
try { //处理异常
d2 = (Dog) d1.clone();
d2.c.catName="666";
System.out.println(d1.c.catName);
}catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}