一、写在前面:
object类是所有类的跟类,也就是说,所有其他类都直接或者间接地继承自object类。object类位于java.lang包下,因此在java程序中不需要显示导入就可以直接使用,
二、构造方法:
构造 函数 | 描述 |
Object() | 构造一个新对象。 |
三、成员方法
方法总结
修饰符和类型 | 方法 | 描述 |
int | hashCode() | 返回对象的哈希代码值。 |
final Class<?> | getClass() | 返回此类的运行时类。 |
toString() | 返回对象的字符串表示形式。 | |
boolean | equals() | 指示其他对象是否“等于”此对象。 |
1、hashCode():返回对象的哈希代码值。
@Test
void hashCodeTest(){
//创建对象
Student student1 = new Student();
Student student2 = new Student();
//比较两个学生对象的hashcode值是否相同
System.out.println("student1的哈希码:"+student1.hashCode());
System.out.println("student2的哈希码:"+student2.hashCode());
System.out.println("student1的哈希码:"+student1.hashCode());
//
// student1的哈希码:1232631679
// student2的哈希码:2076611420
// student1的哈希码:1232631679
}
总结:不同对象的hashcode值是不相同的,相同的对象hashcode相同
2.getClass() :可以返回调用此方法的对象的运行时类对象(反射)
@Test
void getClassTest(){
//创建对象
Student student1 = new Student();
Student student2 = new Student();
//获取学生类的class对象
Class aClass1 = student1.getClass();
Class aClass2 = student2.getClass();
System.out.println("aClass1" + aClass1);
System.out.println("aClass2" + aClass2);
// aClass1class com.zcm.Demo.Entity.Student
// aClass2class com.zcm.Demo.Entity.Student
}
总结:从结果来看,输出结果相同,相同的对象通过调用getClass()方法,得到的Class对象是相同的。
3.toString() :toString()
方法返回一个表示该对象的字符串。
@Test
void toStringTest(){
Student student = new Student();
Student student1 = new Student();
System.out.println("student对象的toString返回值"+ student.toString());
System.out.println("student1对象的toString返回值"+ student1.toString());
// student对象的toString返回值com.zcm.Demo.Entity.Student@32f5ecc4
// student1对象的toString返回值com.zcm.Demo.Entity.Student@19bedeb8
}
总结:toString() 方法默认打印的的确是“类的正名 + @ + 哈希码值的十六进制
在Java中,如果你没有在类中显式地重写
toString()
方法,那么它会默认返回一个由类名和对象的哈希码组成的字符串。因此,如果Student
类没有重写toString()
方法,那么student.toString()
和student1.toString()
的返回值将是不同的,因为它们对应不同的对象,拥有不同的哈希码。如果你希望这两个对象的toString()
返回值相同,你需要在Student
类中重写toString()
方法,以便返回你认为合适的字符串表示形式,比如学生的姓名、年龄等信息。
student 重写toString方法后
@Test
void toStringTest(){
Student student = new Student();
Student student1 = new Student();
System.out.println("student对象的toString返回值"+ student.toString());
System.out.println("student1对象的toString返回值"+ student1.toString());
// student对象的toString返回值Student{name='null', curriculum='null', age=null, sex=null}
// student1对象的toString返回值Student{name='null', curriculum='null', age=null, sex=null}
}
4.equals() :equals()方法默认比较的是两个对象的引用。
@Test
void equalsTest(){
Student stu = new Student();
stu.setName("张三");
Student stu2 = new Student();
stu2.setName("李四");
System.out.println("比较两个对象引用:" + stu.getName().equals(stu2.getName()));
System.out.println("比较是否相同:" +"张三".equals(stu.getName()));
// 比较两个对象:false
// 比较是否相同:true
}
总结:在 Java 中,`Object` 类中的 `equals()` 方法用于比较两个对象是否相等。默认情况下,`equals()` 方法比较的是对象的引用,即判断两个对象是否指向内存中的同一块地址。因此,如果没有在类中重写 `equals()` 方法,它将使用 `Object` 类中的默认实现,即比较对象的引用是否相同。但是,可以根据需要在子类中重写 `equals()` 方法,以便根据对象的内容来判断它们是否相等。通常情况下,重写 `equals()` 方法时需要同时重写 `hashCode()` 方法,以保证对象的一致性。