2022-07-23 第4组 蒋萍 Object的一些类

Object 类

是所有类的直接或间接父类;

一个类没有使用extends关键字明确标识继承关系,默认继承Object类;


1、Object 类被子类常重写的方法

1.1 toString()

  • 返回当前对象本身的有关信息,按字符串对象返回;

1.2 equals()

  • 比较两对象是否是同一对象,是则返回true;

image

  • 尽量比较引用数据类型不使用双等号

1.3 hashCode()

  • 返回该对象的哈希码值 ;

    一般与equals一起用,hash算法算出的一系列值 ,比较对象时

    如果对象equals相等,hashcode也相等,是同一对象。

1.4 getClass()

  • 获取当前对象所属类的信息,返回Class对象(反射机制);

note:

Object类的equals()方法:

操作符 ==

  • 默认情况下,equals() 作用和 == 作用是一样的,都是比较是否为同一对象!!
  1. **简单数据类型,直接比较值。> 1==2 **为false
  2. 引用类型,比较两者是否为 同一对象;> 这时比较的是地址
  • 没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,此时 equals方法 与 == 就也是等效的,除非我们在此类中重写equals() 。

更多可以参看:

https://www.cnblogs.com/zjc950516/p/7877511.html

2、 重写equals()

我们先看:

// 测试类
public static void main(String[] args) {
        Stu s1=new Stu("张",18,50);
        Stu s2=new Stu("张",18,50);
        
        // 此时还没重写equals()
        // ta与== 效果是相同的
        System.out.println(s1==s2);// false
        System.out.println(s1.equals(s2));// false

    }

看equals() 重写源码:

 @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
  • 现在告诉计算机一个新的比较规则:

用你传过来的obj 拿来和 this(当前的学员对象)比较如果名字和id相同就认为是一个对象;

 // 重写equals()
@Override
    public boolean equals(Object obj) {
        // 是学生对象
        if (this == obj){
            return true;
        }
        // A instanceof B 判断A是否属于B类型
        // 不是学生类型
        if (!(obj instanceof Stu)){
            return false;
        }
        // 是学生类型——> 转换称学生对象
        Stu s=(Stu)obj;
        // 比较String 内容的用equals()
        if (this.id==s.id && this.name.equals(s.name)){
            return true;
        }else {
            return false;
        }
    }

// 看此时的测试类

public static void main(String[] args) {
        Stu s1=new Stu("张",18,50);
        Stu s2=new Stu("张",18,50);

        System.out.println(s1==s2);//  false-->地址不同
        System.out.println(s1.equals(s2));// true
        // 这时这里的equals已经重写过了,现在比较的是两个字符串内容是否相同!!!
        // 此时 true--> 地址不同,但内容是相同的
    }

instanceof 操作符用于判断某一对象是否属于某一类型;

其实就是说String 这个字符串类已经被JDK重写过了,所以它的方法不是比较两字符串是不是指向同一对象,而是两内容是否相同

下面继续看:toString()

System.out.println(s1.toString());
//inherit.Stu@71be98f5——> 对象地址

我不想要这样的结果,现在我希望输出学生对象的字符串可以表示:学生的姓名

就是我输入s1.toString 希望能看到 "张三"

同理,我们思路与重写equals()是一样的:

2、重写toString()

IDEA里快捷键 Alt+insert 非常快,需求要返回什么,就 return 什么

   @Override
    public String toString() {
        return "Stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }

// 打印
System.out.println(s1.toString());
// Stu{name='张', age=18, id=50}
```****
posted @ 2022-07-23 15:01  来日可追  阅读(26)  评论(0编辑  收藏  举报