-
对象比较:
boolean | equals(Object obj) 指示其他某个对象是否与此对象“相等”。 |
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
* @param obj the reference object with which to compare.
* @return {@code true} if this object is the same as the obj
* argument; {@code false} otherwise.
* @see #hashCode()
* @see java.util.HashMap
*/
public boolean equals(Object obj) {
return (this == obj);
}
引用数据类型String 对 equals 改写了 变成比较内容:
向上转型:此时方法 形参是Object ,传入Person 子类 会隐藏子类的属性。导致没有age 这个属性。
class Person {
private int age;
private String name;
Person(int age){
this.age=age;
}
public boolean equals(Object obj){
return this.age==obj.age;//报错
}
System.out.println(person1.equals(person2));
}
改进:建立对象的特有比较
public boolean equals(Object obj){
Person p=(Person)obj;
return this.age==p.age;// }
自定义方法equals(Object obj) :先判断类型 然后再强转。 向下转型要主要抛出 异常。
开发过程中:一般都会覆盖此equals方法一般根据对象的特有内容,作为判断的依据。因为单纯的判断对象地址是否相同没有意义。
/**
* Created by zengjx on 2019/4/24.
*/
class Person {
private int age;
private String name;
Person(int age){
this.age=age;
}
public boolean equals(Object obj){
if(!( obj instanceof Person)){//判断是否是Person 类
// return false;
throw new ClassCastException( "类型错误");
}
Person p= (Person)(obj);
return this.age==p.age;
}
}
class Demo_1{
}
public class ObjectDemo {
public static void main(String[] args){
Person person1= new Person(20);
Person person2= new Person(20);
Person person3=person1;//
//引用不同对象
//System.out.println(person1==person2);//比较两个对象 false
// System.out.println(person1.equals(person2));//比较两个对象: fasle 不是同一个对象
// 引用同一个对象地址相同
// System.out.println(person1==person3);//true
Demo_1 d1=new Demo_1();
System.out.println(person1.equals(d1));//报错
}
hascode 方法;
重写hashcode 方法
class PerSon{
public int iData;
public PerSon(int id){
this.iData=id;
}
public int hashCode(){
return iData;
}
}
public class ObjectDemo {
public static void main(String[] args){
PerSon person =new PerSon(20);
System.out.println("hashcode"+person.hashCode());
System.out.println("hashcode"+person);
System.out.println("hashcode hex"+Integer.toHexString(person.hashCode()));
// 重写之前 输出
// hashcode381259350
// hashcodePerSon@16b98e56
// hashcode hex16b98e56
//重写之后
// hashcode20
// hashcodePerSon@14
//hashcode hex14
//对象相同 :1.hashcode 值相同 2.内容相同
}
}
-
getClass 方法:当前运行的字节码文件对象。
Class clazz1= person.getClass();
System.out.println("Class Name : "+clazz1.getName());
Class clazz2= person2.getClass();
System.out.println("Class Name:"+clazz2.getName());
输出结果:Class Name : PerSon
Class Name:PerSon
toString 方法:
// toString
System.out.println(" person toString :"+person.toString());
System.out.println(" person toString :"+person.getClass().getName()+"@"+Integer.toHexString(person.hashCode()));
person toString :PerSon@14
person toString :PerSon@14