Object类
1.1基本概念
java.lang.Object类是java类层次结构的根类,任何类都是该类的直接/间接子类。
1.2常用方法
Object() ---- 表示无参方式构造对象
- boolean equals(Object obj)— 用于判断调用对象是否与参数对象相等。
- -----------该方法默认比较俩个对象的地址,与==运算符的效果等价。
- -----------为了使得该方法比较俩个对象的内容,则需要重写该方法。
- -----------当该方法重写后,通常有必要重写hashCode()方法,为了维护此方法的常规协定。
- int hashCode() — 用于返回调用对象的哈希码值(对象内存地址的编号)。
- ----------- 当俩个对象调用equals()方法的结果相同时,则各自调用hashCode()的结果必须相同
- ----------- 当俩个对象调用equals()方法的结果不相同,则各自调用hashCoed应该不同
- String toString() — 用于返回调用对象的字符串表示形式。
- ----------- 默认返回:包名.类名@哈希码的16进制形式
- ----------- 为了返回更有意义的数据,则需要重写该方法
- ----------- 当使用print()/println() 打印引用或者使用字符串拼接引用是,会自动调用该方法
public class Student{
String name;
int Id;
public Student(){
}
public Student(String name,int Id){
setName(name);
setId(Id);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return Id;
}
public void setId(int Id) {
if (Id<0){
System.out.println("学号不合法");
}else{
this.Id = Id;}
}
@Override
public boolean equals(Object obj){
/*
1.若调用对象和参数对象的地址相同,则内容一定相同
2.若调用对象不为空,参数对象为空,内容一定不相同
3.若调用对象与参数对象类型相同,则比较对象的age属性
4.若参数对象和调用对象的类型不同,则内容一定不同
[ 调用对象是Student 参数对象时obj ]
*/
// if(this == obj){
// return true;
// }else if(null == obj){
// return false;
// }else if(obj instanceof Student){
// Student s=(Student)obj; //为了能够调用子类独有的对象
// if(this.getAge()== s.getAge()){
// return true;
// } return false;
// }
// else{
// return false;
// }
if(this == obj) return true;
if(obj instanceof Student){
Student s=(Student)obj;
return this.getId()==s.getId();
//俩个等于为比较运算符
}if (obj == null) return false;
return false;
}
//为了让hashCode()方法与equals保持一致,因此徐亚重写该方法
@Override
public int hashCode(){
//return getId();
int type=12;
return type*31+getId();
}
@Override
public String toString(){
return "Student[id="+getId()+",name="+getName()+"]";
}
}
----------------------------------
public class TestDemo {
public static void main(String[] args) {
Student s1=new Student("zhangsan",15);
Student s2=new Student("xiaowang",16);
Student s3=new Student();
boolean b=s1.equals(s2);
System.out.println(b);
// System.out.println(s2==s3);
System.out.println("----------------");
int ha=s1.hashCode();
System.out.println(ha);
int ha1=s2.hashCode();
System.out.println(ha1);
System.out.println("-------------");
String str=s2.toString();
System.out.println(str);
System.out.println(s1);//当打印一个引用时,它会自动调用一个toString()
String str2="hello"+s2;
System.out.println(str2);
}
}