Object概述

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有特别指定父类, 那么默认则继承自Object类。

常用方法

public String toString():返回该对象的字符串表示。

代码举例:

定义person类

package demo01;

public class Person {
    //创建成员变量
    private String name;
    private int age;
    //getXxx setXxx方法

    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;
    }
    //直接打印对象名是输出对象的内存地址值,没有意义。我们要重写toString方法,输出我们想要的内容。

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

定义测试类

package demo01;

public class Demo01ToString {
    public static void main(String[] args) {
        //创建person对象
        Person person = new Person();

          /*java.lang.Object`类是Java语言中的根类,即所有类的父类。
        `public String toString()`:返回该对象的字符串表示。
         */
        //直接打印 对象名 其实就是调用对象的ToString方法。默认输出的是内存地址值
        System.out.println(person);// 等价于    System.out.println(person.toString());

    }
}

执行结果:

注意:

  1. 看一个类是否重写了toString方法,只需要直接打印对象名即可。如果输出结果是内存地址值,那么此类就没有重写toString方法
  2. 在IntelliJ IDEA中,可以点击Code菜单中的Generate,也可以使用快捷键alt+insert,点击toString()选项。选择需要包含的成员变量并确定。

public boolean equals(Object obj):比较其他某个对象是否与此对象“相等”。参数:object obj :可以传递任意的对象。

查看equals源码:

 public boolean equals(Object obj) {
            // 默认是使用== 运算符 去判断2个对象是否相等
            return (this == obj);
        }

分析源码:

this是谁?

谁调用此方法,this就是哪个对象。谁是参数,obj就代表谁。例如:

        Person p1 = new Person("张三", 18);
        Person p2 = new Person("李四", 19);
        boolean b = p1.equals(p2); // this就是p1,obj参数就是p2 , this == obj 等价于 p1 = p2
        System.out.println(b);//false

又因为:

== 比较运算符,返回的是一个布尔值 true false。根据数据类型的不同,比较的内容不同。

  • 基本数据类型:比较的是数值
  • 引用数据类型:比较的是内存地址值

结论:

object 类中的equals方法,默认比较的是对象的内存地址值,没有意义。实际开发中我们需要重写equals方法比较对象的属性值。因为参数是object 是父类传递进来的是子类对象。多态弊端:无法使用子类特有的属性和方法,解决方法:向下转型。大多数IDE都可以自动生成equals方法的代码内容。在IntelliJ IDEA中,可以使用Code菜单中的Generate…选项,也可以使用快捷键alt+insert,并选择`equals() and hashCode()进行自动代码生成。生成的equals方法代码如下:

 @Override
    public boolean equals(Object o) {
        // 如果内存地址,一样 那么必然相等,
        if (this == o)
            return true;
        /*getClass() != o.getClass()利用反射技术判断是p,是否是Person类型
        等价于obj  instanceof Person
        */
        if (o == null || getClass() != o.getClass())
            return false;
        Person person = (Person) o;
        //Objects.equals(name, person.name); 可以防止空指针异常,详解:Ojects类equals 源码
        return age == person.age && Objects.equals(name, person.name);

    }

这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。

 

类Object的更多相关文章

  1. java的eclipse操作和常用类Object的使用

    1.eclipse的快捷键: (1)alt + /   内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...

  2. JAVA 一个特殊的类 Object

    一个特殊的类Object:它是java中所有对象的直接或间接父类,根父类(基类),它里面定义的功能是所有对象都应该具备的(所有的类,都是继承这个类的) 记住:当定义一个新类时,没有指明要继承某类,它默 ...

  3. Java常用类object详解

    1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...

  4. python 类(object)的内置函数

    python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...

  5. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  6. Java中特殊的类——Object类

    Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...

  7. java常用类 --- Object

    Object类 Object类是所有Java类的父类,其位于java.lang包中.任何Java对象,如果没有显示定义父类则它默认Object类作为父类. 方法如下: 其中与线程相关的有5个方法: n ...

  8. java笔记--超级类Object多线程的应用+哲学家进餐算法内部类与多线程结合

    关于Object类中的线程方法: Object类是所有Java类的 父类,在该类中定义了三个与线程操作有关的方法,使得所有的Java类在创建之后就支持多线程 这三个方法是:notify(),notif ...

  9. C# - 系统类 - Object类

    Object类 ns:System 此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为 ...

  10. 【小白的java成长系列】——顶级类Object源代码分析

    首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetw ...

随机推荐

  1. Hadoop系列005-Hadoop运行模式(下)

    本人微信公众号,欢迎扫码关注! Hadoop运行模式(下) 2.3.完全分布式部署Hadoop 1)分析: 1)准备3台客户机(关闭防火墙.静态ip.主机名称) 2)安装jdk 3)配置环境变量 4) ...

  2. 记一次工作失误,openresty报502错误

    调试落地项目,代理跳转接口报502错误. 一开始认为阿里云tomcat有误,后面发现别的地址代理跳转有效. 开始配置跳转地址,一直折腾半天不好使.后面才知道,应用服务器和数据库服务器是分开部署的.一直 ...

  3. 处理SQL Server中的重复行

    如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健. 复合主键 使用SQL Server语法创建符合主键非常简单. create table my_parts ( id_par ...

  4. .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

  5. springboot~yml里的自定义配置

    主要介绍三种,字符串配置,数组配置和带默认值的配置 字符串配置 //yml setString: hello /** * 字符串. */ @Value("${setString}" ...

  6. RDIFramework.NET V3.3 WinForm版新增日程管理功能模块

    功能描述 日程管理基于月.周.日的日历视图,把安排到每一天的具体时间点,让每一天的时间都充分利用:甚至您也可以把个人非工作事项也安排进来,完全是属于自己的全时间管理.就是将每天的工作和事务安排在日期中 ...

  7. TypeScript|Angular踩坑笔记

    今天按照Angular官网玩了下demo程序,踩了个小坑,记录下. TypeScript可以将变量申明为自定义类型,同时也不对该类型进行检查(不像C#,如果没有这个类型会报错) 比如下面这样: 如果我 ...

  8. Python使用Ctypes与C/C++ DLL文件通信过程介绍及实例分析

    项目中可能会经常用到第三方库,主要是出于程序效率考虑和节约开发时间避免重复造轮子.无论第三方库开源与否,编程语言是否与当前项目一致,我们最终的目的是在当前编程环境中调用库中的方法并得到结果或者借助库中 ...

  9. PHP类和函数注释大全

    每次要用PHP的某个功能的时候,都要去查一下,于是决定将PHP所有类和函数都整理出来,加上注释 大致实现 将php.jar文件解压,取出目录stubs 将stubs中的所有php文件中的注释去掉,并做 ...

  10. 基于Kubernates微服务案例

    企业业务上云的三种架构 容器的三个视角 从运维角度 数据工程师角度 开发角度微服务化 12 Factor Related Reference: https://kubernetes.io/https: ...