【Java篇】—— Object类
目录
🎈Object类
class A{
}
class B{
}
public class Test1 {
public static void func(Object obj){
//向上调整 子类的A到父类的Object
}
public static void main(String[] args) {
func(new A());
func(new B());
}
}
范例:使用 Object 接收所有类的对象
所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法。如下:
🚩获取对象信息
如果要打印对象中的内容,可以直接重写Object类中的toString()方法,之前已经讲过了,此处不再累赘。
// Object类中的toString()方法实现:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
如果我们打印Student的属性值,我们需要自定义toString方法
class Student{
int age;
String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
🚩对象比较equals方法
❗Student类
class Student{
int age;
String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
}
❗运行区
public class Test1 {
public static void func(Object obj){
}
public static void main(String[] args) {
Student student1=new Student(10,"chen");
Student student2=new Student(10,"chen");
System.out.println(student1.equals(student2));
}
}
我们看到即使是相同的姓名和相同的年龄最终运行的结果是false错误,这是为什么呢?
我们按照程序来调试一遍
我们看到底层的equal的方法是按照俩者的地址来判断的。如果我们不根据地址判断,我们需要用判断年龄相等并且姓名相等,我们就认为这俩个学生相等。需要我们自己自定义一个equal方法。
@Override
public boolean equals(Object obj) {
if(obj ==null){
return false;
}
if(this==obj){
return true;
}
//不是Student类
if(!(obj instanceof Student)){
return false;
}
Student student=(Student) obj;
if(this.name.equals(student.name) && this.age==((Student) obj).age){
return true;
}else {
return false;
}
}
我们肯定疑惑为什么name属性直接使用equal方法,因为String字符串类型底层写了自己的equal,所以我们直接判断即可,至于age直接判断。
以后我们写自定义类型(比如Student类型),那么要注意重写equal方法。
结论:比较对象中内容是否相同的时候,一定要重写equals方法。
🚩hashcode方法
public native int hashCode ();
class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class TestDemo4 {
public static void main(String[] args) {
Person per1 = new Person("chenle", 20) ;
Person per2 = new Person("chenle", 20) ;
System.out.println(per1.hashCode());
System.out.println(per2.hashCode());
}
}
//执行结果
460141958
1163157884
class Person{
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
}
1 、 hashcode 方法用来确定对象在内存中存储的位置是否相同2 、事实上 hashCode() 在散列表中才有用,在其它情况下没用。在散列表中 hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
事情总是一件一件一件的完成的。
原文地址:https://blog.csdn.net/m0_74438843/article/details/136040571
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!