首页 > 编程语言 >JavaSE(十二)-Object类

JavaSE(十二)-Object类

时间:2023-11-10 12:36:56浏览次数:39  
标签:String 对象 Object 十二 equals JavaSE public name



文章目录

  • 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类_Java知识点


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


标签:String,对象,Object,十二,equals,JavaSE,public,name
From: https://blog.51cto.com/xiongmaoit/8295541

相关文章

  • JavaSE(三十一)-IO流--PrintWriter类
    文章目录1.常用的构造方法2.常用方法3.PrintWriter和BufferedWriter的使用区别java.io.PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据。可以理解为java中的文件输出,java中的文件输入则是java.io.File。1.常用的构造方法1)构造方法参数为String......
  • Object类
          ......
  • EF报错:Unable to create an object of type 'XXXXXXX'. For the different patterns s
    这个是在EF迁移的时候报错: 解决方案:修改你的MyDbcontext:  代码如下:publicclassStoreDbContexttFactory:IDesignTimeDbContextFactory<‘你的类名’>{public‘你的类名’CreateDbContext(string[]args){varoptionsBuilder=newDbContextOptionsBuilder<‘......
  • (十二)C#编程基础复习——break、continue、goto:跳出循环
    在使用循环语句时,并不是必须等待循环完成后才能退出循环,我们也可以主动退出循环,C#为我们提供了break、continue和goto三种方式来跳出循环:1、break它不仅可以用来终止switch语句,在循环语句中使用时还可以用来跳出循环,执行循环外的下一条语句。如果是在嵌套循环中使用,例如在内层的......
  • NodeJS系列(15)- TypeScript (二) | 对象类型 (Object Types)
    在“NodeJS系列(14)-TypeScript(一)|安装TypeScript、常用类型”里,我们简单介绍了TypeScript的安装配置,讲解和演示了TypeScript常用类型。本文继续介绍TypeScript对象类型(ObjectTypes)。TypeScript:https://www.typescriptlang.org/(中文版:https://ts.nodejs.cn/)Micro......
  • Windows ObjectType Hook 之 SecurityProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的SecurityProcedure。文章实......
  • 第二十二次打靶
    靶机介绍1)靶机地址:https://download.vulnhub.com/geminiinc/Gemini-Pentest-v2.zip2)靶机难度:中3)打靶目标:取得root权限+2Flag4)涉及攻击方法:主机发现、端口扫描、信息收集、隐藏路径爬取、开放注册、验证码爆破、AntiCSRFToken、密码破解、WAFBypass、命令注入绕过、S......
  • java object 转为 json
      JSONObjectjsonObject=JSONObject.fromObject(map)执行到这的时候没有任何反应的原因及解决办法 JSONObject,JSONArray使用手册http://www.open-open.com/lib/view/open1391842371442.html JSONObject.fromObject(map)(JSON与JAVA数据的转换) 使用JSON时,除了要导入JSON网站上......
  • How to resize slide dimensions without resizing any objects on the slide?
    IFyouarecompetenttounzipthepptxfileandmodifytheXMLitcanbedone,theslidesizewillchangebutthepictureswillnotchange(theywillmovethoughandyouwillhavetoadjustthepositions)Unzip>lookforPPT>presentationXMLandc......
  • JUC并发编程学习笔记(十二)Stream流式计算
    Stream流式计算什么是Stream流式计算大数据:存储+计算集合、MySql这些的本质都是存储东西的;计算都应该交给流来操作!一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算packageorg.example.stream;importjava.util.Arrays;importjava.util.List;impo......