Object类
1.1 Object概述
Object类是所有类的超类、根类,基类;
任何类直接或间接地继承Object类;
所有对象都具备Object的方法;
Object作为参数可以接受任何对象,作为返回值可以返回任何对象。
1.2 getClass()方法
- getClass()方法用来获取调用者所属的类型;
- 通常在判断两个对象的引用类型是否一致。
- public final native Class<?> getClass(){};
- getClass()方法返回的是调用者所属的类
//创建一个学生类
public class Students{
private String name;
private String age;
public Students(){}
public Students(String name,String age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public void setAge(String age){
this.age=age;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
}
//创建测试类
public class Test{
public static void main(String[] args){
Students st1=new Students();
Students st2=new Students();//创建两个对象
Class c1=st1.getClass();
Class c2=st2.getClass();//getClass方法返回的是调用者对象的类型
if(c1==c2){////getClass方法多用于判断两者是否为同一类型
System.out.println("st1和st2类型一致");
}else{
System.out.println("st1和st2类型不一致");
}
}
}
1.3 hashCode()方法
- public native int hashCode(){};
- hashCode()方法返回调用者的哈希码值。
- 哈希码值是根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值。
- 相同对象返回的相同哈希码
//创建测试类
public class Test{
public static void main(String[] args){
Students st1=new Students();
Students st2=new Students();//创建两个对象
System.out.println(st1.hashCode);
System.out.println(st2.hashCode);
//对象内存不一致、哈希码值也不一样
Students st3=st1;//st1的内存地址赋值给了st3
if(st3.hashCode==st1.hashCode){
System.out.println("st1和st2哈希码值一致");
}else{
System.out.println("st1和st2哈希码值不一致");
}
}
}
1.4 toString()方法
//object中的toString()方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- toString()方法返回的是描述调用者对象的字符串;默认情况下返回的是一个由该对象所属的类名、@符号以及十六位进制的内存地址
- 可以在对象的类中重写toString()方法,以此让外部调用对象的toString()方法时可以展示其各个属性值。
//创建学生类
public class Students{
private String name;
private String age;
public Students(){}
public Students(String name,String age){
this.name=name;
this,age=age;
}
public void setName(String name){
this.name=name;
}
public void setAge(String age){
this.age=age
}
public String getName(){
return name;
}
public String getAge(){
returen age;
}
@override//快捷键ALT+INS生成
public String toString(){
return "Students{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
//测试类
public class Test{
public static void main(String[] args){
Students st1=new Students();
Students st2=new Students();//创建两个对象
/*
System.out.println(st1.toString());
System.out.println(st2.toString());
当学生类没有重写toString方法时,输出
com.liuwei.API.ObjectDemo.Students@1b6d3586
com.liuwei.API.ObjectDemo.Students@4554617c
*/
//当我们在学生类中重写toString方法
st1.setName("工地佬");
st1.setAge("25");
System.out.println(st1.toString());
//输出结果
//Students{name='工地佬', age='25'}
}
1.5 equals()方法
////object中的equals()方法
public boolean equals(Object obj) {
return (this == obj);
}
- equals()方法默认比较的是两者的对象地址
- 当我们在对象类中重写equals()方法后,外部调用对象的equals()方法便成为比较对象的内容
//创建学生类
public class Students{
private String name;
private String age;
public Students(){}
public Students(String name,String age){
this.name=name;
this,age=age;
}
public void setName(String name){
this.name=name;
}
public void setAge(String age){
this.age=age
}
public String getName(){
return name;
}
public String getAge(){
returen age;
}
@override//快捷键ALT+INS生成
public String toString(){
return "Students{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;//判断两个对象引用是否相同,若一致,则对象一致,内容也就一样
if (o == null || getClass() != o.getClass()) return false;//判断被比较对象是否为空值,或者两个对象类名不同则为false
Students students = (Students) o;//强制转换
return Objects.equals(name, students.name) && Objects.equals(age, students.age);//匹配内容
}
}
//测试类
public class Test{
public static void main(String[] args){
//equals()方法
System.out.println(st1.equals(st2));
//默认条件下的equals方法对于基础类型是比较值,对象类型是比较内存地址
//我们可以通过在类里重写equals方法,使得对象在调用equals方法时比较的是内容
Students st5 = new Students("牛马", "25");
Students st4= new Students("牛马", "25");
System.out.println(st4.equals(st5));//true
//当我们在重写引用对象的类中重写equals方法后,将比较的是两个对象的内容
}
}