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. 用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

    本文介绍如何保护API,无需看前边文章也能明白吧. 预备知识: http://www.cnblogs.com/cgzl/p/9010978.html http://www.cnblogs.com/cg ...

  2. 《白帽子讲Web安全》- 学习笔记

    一.为何要了解Web安全 最近加入新公司后,公司的官网突然被Google标记为了不安全的诈骗网站,一时间我们信息技术部门成为了众矢之的,虽然老官网并不是我们开发的(因为开发老官网的前辈们全都跑路了). ...

  3. Spring Boot 中的静态资源到底要放在哪里?

    当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥Spring Boot 中的静态资源加载问题:"松哥,我的HTML页面好像没有样式?& ...

  4. AntZipUtils【基于Ant的Zip压缩解压缩工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android 压缩解压zip文件一般分为两种方式: 基于JDK的Zip压缩工具类 该版本存在问题:压缩时如果目录或文件名含有中文, ...

  5. PyTorch入门(一)向量

    什么是PyTorch?   PyTorch是Facebook人工智能团队开发的一个机器学习和深度学习工具,用于处理大规模图像分析,包括物体检测,分割与分类.但是它的功能不仅限于此.它与其它深度学习框架 ...

  6. C# 默认访问权限

    声明类.方法.字段.属性时不加访问权限修饰符时的访问权限是什么呢?1. 声明命名空间.类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集. 2. 声明类成员(域.属性 ...

  7. [转]Blue Prism Interview Questions and Answers

    本文转自:https://www.rpatraining.co.in/blue-prism-interview-questions/ What is a Visual Business Object? ...

  8. 菜鸟先飞C#学习总结(一)

    一.第一个程序Hellow Word using System; //using 关键字用于在程序中包含 System 命名空间. 一个程序一般有多个 using 语句. using System.C ...

  9. InnoSetup 脚本打包及管理员权限设置

    InnoSetup使用教程:InnoSetup打包安装 脚本详细 1. 定义变量 #define MyAppName "TranslationTool" #define MyApp ...

  10. 持续交付之软件包管理maven篇

    背景 持续交付的我们常见的流程如下,其中有一个环节就是软件包管理 今天我们以maven仓库为示例,如下是Jenkins与CD生态: 持续交付的示例 5 Principles 五个原则 Deliver ...