Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中常用的API(一)——Object

Java中常用的API(一)——Object

作者头像
roobtyan
发布于 2019-02-21 07:51:11
发布于 2019-02-21 07:51:11
50500
代码可运行
举报
运行总次数:0
代码可运行

概述

如果要问Java为什么是用起来非常舒服的语言,那很大一部分的功劳就是JavaAPI的。API定义了许多封装好的类和方法供我们使用,来处理特定的问题,所以学习常用的API是非常重要的。 同时,面向对象的核心思想就是用合适的对象去做合适的事情。什么是合适的对象呢?一种是自己根据需要创建的类而生成的对象,另一种是sun官方描述的好多常用的类,我们使用这些类创建的对象,这也就是API的概念。 sun定义的那么多类的终极父类是Objec类。Object描述的是所有类的通用属性与方法。 所以,API的介绍就是从Object类开始的。

Object对象

1. toString方法:返回的是对象的描述信息 当我们直接输出一个对象的时候,这时候就会调用被输出对象的toString方法。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person{
    public String name;
    public String sex;
    public int age;

    public Person(String name,String sex,int age){
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
}
public class Demo1 {
    public static void main(String[] args){
        System.out.println(p);
    }
}

代码执行后输出的结果是:java.lang.Object@de6ced 可以看出,直接调用toString方法输出的是:类名@哈希码值的十六进制形式。 对于上述代码,如果给出的需求是这样的:调用输出方法的时候,输出这个对象(Person)姓名、年龄、性别。这个时候又应该如何实现呢? 根据我们之前学的继承,假如父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。 所以为了达到这个目的,需要对Person类的toString方法重写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//重写toString方法
public String toString(){
    return "姓名:" + name + " 性别:" + sex + " 年龄" + age;
}

这个时候,输出的内容就满足我们的需求了。 这里一个重要的编程习惯就是:我们在进行开发时,要对自定义的类重写toString方法,对对象进行详细的描述说明。

2. equals方法:返回的是比较的结果 利用equals方法来比较两个对象,如果相等返回true,否则false,比较的是对象的内存地址值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Demo1 {
    public static void main(String[] args){
        Person p = new Person("王浩","男",33);
        Person p1 = new Person("王浩","男",33);
        System.out.println(p.equals(p1));
    }
}

还是使用Person这个类,创建的两个对象。根据我们前面学习的知识,比较之后输出的结果肯定是false。因为创建的这两个对象的内存地址不同,所以会产生这样的输出结果。 如果我们将代码这样改写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Demo1 {
    public static void main(String[] args){
        Person p = new Person("王浩","男",33);
        Person p1 = p;
        System.out.println(p.equals(p1));
    }
}

这时候,输出的结果就是true了。因为此时p和p1指向的是同一块内存地址。 那么,接下来我们有一个需求:将equals比较的条件换成姓名、性别、年龄,如果以上三项相同,则表示相同。根据toString方法的启示,这里当然也要对equals方法进行重写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person{
    public String name;
    public String sex;
    public int age;

    public Person(String name,String sex,int age){
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
    public boolean equals(Object obj){
        Person p = null;
        //判断obj对象是否属于Person类
        if(obj instanceof Person){
            //obj对象如果是Person的类,则对obj进行类型转换
            p = (Person)obj;
        }
        if(this.name.equals(p.name)&&this.sex.equals(p.sex)&&this.age==p.age){
            return true;
        }
        return false;
    }
}
public class Demo1 {
    public static void main(String[] args){
        Person p = new Person("王浩","男",33);
        Person p1 = new Person("王浩","男",33);
        System.out.println(p.equals(p1));
    }
}

此时输出的结果就是true了。 注意:代码中的instanceof的作用是判断某个对象是否属于某个类,这个关键字的应用还是相当广范的。 最后,我们要对自定义的类重写equals(),使得比较两个对象的时候比较对象的属性是否相等,而不是内存地址

3. hashCode方法:返回该对象的哈希码值 这个方法采用系统底层的哈希算法实现,同一个对象的呷西码是唯一的,同时,java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。 所以,一旦对equals方法重写,那么一般来讲也要对hashCode方法重写。对于hashCode方法不做过多赘述。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年02月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么重写对象equals方法要重写hashcode方法的真正原因!
javaGuide里说到了为什么要重写hashcode的原因: 3)为什么重写 equals 时必须重写 hashCode 方法? 如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖。 hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 cl
名字是乱打的
2021/12/24
1.1K1
JavaApi高级编程(一)Object以及equals和==的区别
目录 一、Api概念 A、应用程序接口 B、函数与类的集合 二、java的数据类型 1、值类型 2、引用类型 三、equals和==用法的区别 1、==用于比较地址 2、equals用于比较对象存的内容 四、object类 1、toString()方法 2、equals()方法 以上知识就分享到这里,希望对大家有帮助 ---- 一、Api概念 1、API(application programming interface A、应用程序接口 B、函数与类的集合 二、java的数据类型 1、值类型 值类
天蝎座的程序媛
2022/11/18
2040
JDK1.8源码(一)——java.lang.Object类
  本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址。   首先介绍JDK中所有类的基类——java.lang.Object。   Object 类属于 java.lang 包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。Object 类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类,也就是说任何类都直接或间接继承此类,Object 类中能访问的方法在所有类中都可以调用,下面我们会分别介绍Object 类中的所有方法。 1、Object
IT可乐
2018/03/30
1.4K0
JDK1.8源码(一)——java.lang.Object类
Java基础(九):Object 类的使用
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由Java去调用
Java微观世界
2025/01/21
1870
Java基础(九):Object 类的使用
Object类、常用API
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100195.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
2K0
Object类、常用API
应用程序编程接口-API
API(Application Programming Interface):应用程序编程接口
星哥玩云
2022/09/14
5560
应用程序编程接口-API
第十八天 集合-泛型&list接口&set接口【面试+工作】
泛型的使用:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
Java帮帮
2018/07/26
8250
第十八天 集合-泛型&list接口&set接口【面试+工作】
《JavaSE》---16.<抽象类&接口&Object类>
比如之前我们在面向对象系列中所提到的矩形、圆、花。他们都是图形。因此他们可以继承Shape类。而在Shape类中我们有draw方法。但是由于Shape类不是具体的图形。因此不会用到draw方法。而是矩形、圆、花它们用draw方法。因此draw方法其实在Shape类中无法具体实现。所以我们可以将Shape类设计成一个“抽象类”。而把其中的draw方法我们设计成“抽象方法”。
用户11288958
2024/09/24
1320
《JavaSE》---16.<抽象类&接口&Object类>
一起学JAVA API Object String StringBuffer/StringBuilder
大家好,又见面了,我是你们的朋友全栈君。 1 前言 亲爱的小伙伴萌,目前我们看到的是Java基础部分的一个新的部分API,这是个啥,又能做啥呢? 其实可以概括成一句话:帮助我们站在巨人的肩膀上
全栈程序员站长
2022/09/01
2470
一起学JAVA API Object String StringBuffer/StringBuilder
Object类
java.lang.Object类是类层次结构的根类,每个类(除了Object类本身)都使用Object类作为超类。一个类如果没有显示声明继承另一个类,则相当于默认继承了Object类。换句话说,Object类的变量可以接收任意类型的对象。Java规定Object[]可以接收任意类型对象的数组,但是不能接收基本数据类型的数组。
别团等shy哥发育
2023/02/25
5250
Object类
深入了解Java中的Object类
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/18
3540
深入了解Java中的Object类
万类之父——Object
  Object类作为Java中的顶级类,位于java.lang包中。所有的类直接或者间接都继承自它。所以Object类中的方法在所有类中都可以直接调用。在深入介绍它的API时,先插一句它和泛型之间的关系。
用户1148394
2019/01/07
5210
【IT领域新生必看】Java编程中的神奇对比:深入理解`equals`与`==`的区别
在Java编程中,比较对象是一个常见的操作。equals和==是两种常用的比较方式,但它们的工作原理和应用场景有所不同。对于初学者来说,理解equals与==的区别,是编写正确和高效代码的关键一步。本篇文章将详细介绍equals与==的定义、用法及其区别,帮助你全面理解这些重要概念。
E绵绵
2024/07/08
3870
内存泄漏避雷!你真的了解重写equals()和hashcode()方法的原因吗?
基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法: 判断对象引用所指向的对象地址是否相等 对象地址相等时, 那么对象相关的数据也相等,包括: 对象句柄 对象头 对象实例数据 对象类型数据 可以通过比较对象的地址来判断对象是否相等 Object源码 对象在不重写的情况下使用的是Object中的equals() 方法和hashCode() 方法 equals(): 判断的是两个对象的引用是否指向同一个对象 hashCode(): 根据对象地址生成一个整数数值 Object的hash
攻城狮Chova
2022/01/22
7250
Java基础-常用API-Object类
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
每周聚焦
2024/12/23
770
Java基础-常用API-Object类
11.JAVA-Object类之finalize(),clone(),toString()等方法覆写
Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用类型为Object的变量指向任意类型的对象。
诺谦
2019/05/24
5210
Java内功心法,Set集合的详解 ​
Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
李红
2019/09/19
5260
Java内功心法,Set集合的详解 ​
Java常用API
编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。
闲花手札
2021/08/24
1.1K0
java基础第十三篇之Collection
常见的几种数据结构: * 1.堆栈:先进后出 * 2.队列:先进先出 * 3.数组:查找快,增删慢 * 4.链表:查找慢,增删快 import java.util.LinkedList;
海仔
2019/08/05
5750
第三阶段-Java常见对象:【第一章 Object类】
在讲解Object类之前,我们不得不简单的提一下什么是API,先贴一组百度百科的解释:
BWH_Steven
2019/08/09
4540
相关推荐
为什么重写对象equals方法要重写hashcode方法的真正原因!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档