JavaSE(十二)-Object类
  eZw8kcl3fQWu 2023年11月19日 12 0



文章目录

  • 1.Object 类
  • 2.Object 类常用方法
  • 2.1.equals方法
  • 3.== 和 equals 的区别
  • 3.1.==
  • 3.2.equals() 方法的使用
  • 4.toString方法
  • 5.hashCode()方法


1.Object 类

在JDK中提供一个Object类,它是类层次结构的根类,每个类都直接或间接基础自该类,所有对象(包括数组)都实现了这个类的方法 。

如果在类的声明中未使用extends关键字指明基类,则默认基类为Object类

public class Person {

}

等价于

public class Person extends Object {

}

2.Object 类常用方法

2.1.equals方法

JavaSE(十二)-Object类_开发语言


1、equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

public class Animal extends Object {

    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

class TestAnimal{
    public static void main(String[] args) {
        Animal a=new Animal("小白");
        Animal b=new Animal("小白");
        boolean flag = a.equals(b);//false
    }
}

2、试试创建两个String对象,调用equals方法比较一下,你看看会有什么结论?为什么?因为String类重写了equals方法,改成比较内容了

String s1=new String("1");
String s2=new String("1");
boolean flag1 = s1.equals(s2);//true

JavaSDK提供的一些类,如String,Date等,重写了Object类的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true否则返回false

3、那我们自己定义的类能否重写equals方法呢?可以,按照我们自己的要求进行比较

需求:在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如下代码演示:

示例:判断是否是同一只猫

只要猫的颜色、高度和体重相同就认为是同一只猫

public class TestEquals {
    public static void main(String[] args) {
        Cat c1 = new Cat(1, 2, 3);
        Cat c2 = new Cat(1, 2, 3);
        System.out.println(c1 == c2);
        System.out.println(c1.equals(c2));
    }
}

class Cat {
    int color;
    int height, weight;

    public Cat(int color, int height, int weight) {
        this.color = color;
        this.height = height;
        this.weight = weight;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        else {
            if (obj instanceof Cat) {
                Cat c = (Cat) obj;
                if (c.color == this.color && c.height == this.height && c.weight == this.weight) {
                    return true;
                }
            }
        }
        return false;
    }

}

注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

3.== 和 equals 的区别

3.1.==

  • == 是运算符
  • 可以使用在基本数据类型变量和引用数据类型变量中
  • 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等
  • 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同(即两个引用是否指向同一个对象实体)

补充:使用时,必须保证符号左右两边的变量类型一致

3.2.equals() 方法的使用

  • 一个方法,不是运算符,只能适用于引用数据类型
  • Object 类中定义的 equals() 的方法:作用和 == 相同,比较两个对象的地址值是否相同
  • 像 Date、String、File 包装类等都对 equals 方法进行了重写,重写之后比较的不再是引用的地址,而是比较两个对象的实体内容是否相同
  • 通常情况下,自定义的类如果使用 equals 方法的话,通常是比较两个对象的实体内容是否相同。就需要对 equals 方法进行重写

4.toString方法

JavaSE(十二)-Object类_Java核心技术_02


1、toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值

getName() 以String形式返回类对象的名称(包换包名);
Integer.toHexString(hashCode()) 以对象的哈希码为参数,以16进制无符号整数形式返回此哈希码的字符串表示形式;

2、在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法. 但是toString返回值的地址 对我们来说没有实际价值的

3、像 String、Date、File、包装类等都重写了 Object 类中的toString()方法。使得在调用toString()时,返回"实体内容"信息

4、由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

下面是一个简单的例子:

package com.base.learn;

public class Customer {
    private String name;
    private int age;

    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

5.hashCode()方法

public int hashCode()

a、返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
b、不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
c、不是对象的实际地址值,可以理解为逻辑地址值。

//import java.lang.Object;  //java.lang 包下的类,导入语句可以省略不写
public class MyTest{
    public static void main(String[] args) {
        //java.lang
        //Object 所有类的顶层父类,所有类都是直接或间接继承自他
        Object obj= new Object();
        System.out.println(obj);
        //a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
        int i = obj.hashCode();
        System.out.println(i);
        Object obj2 = new Object();
        System.out.println(obj2);
        int i1 = obj2.hashCode();
        System.out.println(i1);
        //不同对象的哈希码值,是不一样的。

    }
}

JavaSE(十二)-Object类_Java知识点_03


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
eZw8kcl3fQWu