文档章节

Java中关系操作符“==”和equals()方法的区别

Lienson
 Lienson
发布于 03/29 15:11
字数 539
阅读 21
收藏 0

一、前言

如果问你Java中==和equals()有何区别,相信你的第一反应会回答:==比较的是它们所指向的对象地址,而equals()方法比较的是它们的内容值。实际上,这样的回答是不全面的。

二、关系操作符“==”

摘自《Java编程思想》一书中的原话:

关系操作符“==”生成的是一个boolean结果,它们计算的是操作数的值之间的关系。

 那么关于==的比较,无外乎以下两种情况。

  • 基本数据类型:它们的比较就是判断值是否相同。
  • 引用数据类型:它们的比较就是判断是否是同一个对象的引用,即其引用变量所指向的对象的地址是否相同。

、equals()方法

我们知道,Java中所有的类都是由Object类派生出来的,在Object类中定义定义了equals()方法,其源码如下:

public boolean equals(Object obj) {
        return (this == obj);
    }

也就是说,在没有被重写的情况下,比较的是引用类型的变量所指向的对象的地址

那么,有哪些常用的类equals()方法被重写了?比如String类、包装类、Date类都是。

String类equals()方法源码:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

包装类,比如Integer中equals()方法源码:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

这些被重写的equals()方法的类,比较的是引用类型的变量所指向的对象存储的内容是否相等,即比较它们的值

推荐阅读 Java中包装类型的大小比较

© 著作权归作者所有

Lienson
粉丝 15
博文 107
码字总数 97577
作品 0
福州
程序员
私信 提问
Java 208 道面试题:Java 基础模块答案

目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多...

王磊的博客
03/05
501
0
equals与”==”的区别

equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equ...

LCZ777
2014/03/30
58
0
java基础:==和equals方法区别

equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equ...

watermelon11
02/23
24
0
hashCode和equals的区别

关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料。 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?e...

Java极客技术
08/07
0
0
java面试题--基础知识(精化版)

版权声明:本文供交流学习,能够帮助到你是我最大的荣幸! https://blog.csdn.net/u014231523/article/details/89302178 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Jav...

兴国First
04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt的MVC设计模式——InterView框架(MVD)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_39743893/article/details/80625759 英雄不问,饮水...

shzwork
1分钟前
0
0
Python 开发植物大战僵尸游戏

作者:楷楷 链接:https://segmentfault.com/a/1190000019418065 开发思路 完整项目地址: https://github.com/371854496/pygame 更多好玩有趣的python,尽在公众号「Python专栏」,后台回复...

上海小胖
今天
12
0
JVM优化之逃逸分析与分配消除

要了解逃逸分析背后的基本原理,我们先来看下这段有问题的C代码——当然这个是没法用Java来写的: 这段C代码在栈上创建了一个int类型的变量,然后把它的指针作为函数的返回值返回了。这样做是...

onedotdot
今天
3
0
最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部