文档章节

Java 中的"=="和equals()方法比较总结。

ChinaHYF
 ChinaHYF
发布于 2016/07/05 21:29
字数 862
阅读 6
收藏 0

1. "==" 的用法:
    1)    对于原生数据类型来说,比较的是左右两边的值是否相等。
    2)    对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。(其实也是值是否相等,因为引用类型的地址是数字表示的)
需要注意的是要把‘==’和equals()方法区分开

2. equals()方法
    1)    对于String类的equals()方法来说,它对Object类中的equals方法进行了重写,它是判断当前字符串与传进来的字符串的内容是否一致。源码如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;    //自己跟自己比返回true
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;    //先向下转换成String类型,才能使用String类里面的方法。
        int n = count;
        if (n == anotherString.count) { //if是先判断两个字符串的长度是不是相等
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            //下面这个是把两组字符进行一个一个的比较,如果出现不同的就返回false
            while (n-- != 0) {
                if(v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;   //表示传进来的参数如果不是字符串的话就返回false
}

    2)    对于Object类来说,equal()方法就是通过==实现的。源码如下:

public boolean equals(Object obj) {
    return (this == obj);
    //this就是当前对象,谁调用equals()方法,谁就是当前对象
    //obj就是传进来的Object类型的对象。
    //"=="两端如果是引用类型,就判断两个引用的地址是否一样(也就是两者是不是同一个对象)。
    //追根到底这个方法的作用就是判断调用equals()方法的对象和传进来的对象(就是equals方法传进来的参数)是否是一个对象。
}

两者比较举例:

public class StringTest {
    public static void main(String[] args) {
        String str = new String("aa");
        String str2 = new String("aa");

        System.out.println(str.equals(str2));

        String str3 = "aa";
        String str4 = "aa";

        System.out.println(str3.equals(str4));

        System.out.println("-----------------");

        Object object = new Object();
        Object object2 = new Object();

        System.out.println(object.equals(object2));
        System.out.println(object.equals(object));

    }
}
最后运行的结果是:前两个都是true(因为他们是String类型的,重写了.equals方法),第三个是false(因为是Object类型比较的是对象的地址是否相等),最后一个是true(同一个对象,内存地址肯定是相同的)

关于Object类的equals方法的特点
a)    自反性(reflexive):x.equals(x)应该返回true
b)    对称性(symmetric):x.equals(y)为true,那么y.equals(x)也为true。
c)    传递性(transitive):x.equals(y)为 true并且y.equals(z)为true,那么x.equals(z)也应该为true。
d)    一致性(consistent):x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也应该为true,前提条件是在比较之间没有修改x也没有修改y。
e)    对于非空引用x,x.equals(null)返回false。

© 著作权归作者所有

共有 人打赏支持
ChinaHYF
粉丝 15
博文 73
码字总数 67184
作品 0
西安
高级程序员
私信 提问
你不知道的 equals 和 ==

先来看一道 equals和 == 相关的面试题吧。 先告诉你答案是 true,true,false,true。 i1 == i2 和 i1.equals(i2) 这两个都是 true,大多数人应该可以答对。后面的 i3 == i4 和 i3.equals(i4...

Wizey
2018/08/17
0
0
Java 208 道面试题:Java 基础模块答案

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

王磊的博客
03/05
0
0
【翻译】Java中String, StringBuffer, StringBuilder的区别

String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会用String定义一些内容,然后通过著名的System.out.println()语句来打印出来。 然而,很多Java新手都不会意识到 String...

YuanyuanL
2014/09/03
0
4
最最最常见的Java面试题总结-第一周

这里会分享一些出现频率极其极其高的面试题,初定周更一篇,什么时候更完什么时候停止。 Github地址:https://github.com/Snailclimb/Java-Guide/blob/master/面试必备/最最最常见的Java面试...

Amsour丶
2018/08/08
0
0
scala中的==、equals、eq

scala中equals方法和==是检查值是否相等,而eq方法检查的是引用是否相等。 Scala 的==与Java的有何差别 Java 里的既可以比较基本类型也可以比较引用类型。对于基本类型,Java 的==比较 值比较...

张欢19933
2018/04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWS自动部署工具codedeploy的部署概述

1)在AWS lambda平台上部署: 三大部分:要部署的内容 --> 部署的配置 --> 更新的lambda函数版本 部署的流程:上传修订的应用程序-->创建一个应用程序-->指定部署组-->指定部署的配置-->指定...

守护-创造
5分钟前
0
0
好程序员教程分享Javascript设计模式

好程序员教程分享Javascript设计模式 方法一 对象字面量表示法   在对象字面量表示法中,一个对象被描述为一组包含在大括号中,以逗号分隔的 name/value 对。对象内的名称可以是字符串或标...

好程序员IT
11分钟前
0
0
fail-fast和fail-safe的介绍和区别

fail-fast和fail-safe 前言 前段时间公司招的实习生在使用迭代器遍历的时候,对集合内容进行了修改,从而抛出ConcurrentModificationException. 然后给他讲解之余也整理了这一篇文章. fail-fa...

群星纪元
13分钟前
0
0
控制反转 IOC

控制反转(Inversion of Control,缩写为IoC)面向对象设计原则,降低代码耦合度 依赖注入(Dependency Injection,简称DI) 依赖查找(Dependency Lookup):容器提供回调接口和上下文条件给...

SibylY
24分钟前
0
0
网络介绍:Kubernetes设计文档

模型和动机 Kubernetes从Docker默认的网络模型中独立出来形成一套自己的网络模型。该网络模型的目标是:每一个pod都拥有一个扁平化共享网络命名空间的IP,通过该IP,pod就能够跨网络与其它物...

xiangyunyan
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部