服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java全面细致讲解==和equals的使用

Java全面细致讲解==和equals的使用

2023-02-07 12:03小老师ir Java教程

这篇文章主要介绍了Java中==和equals()的区别,,==可以使用在基本数据类型变量和引用数据类型变量中,equals()是方法,只能用于引用数据类型,需要的朋友可以参考下

上篇博文:Java-多线程的使用

equals与==

1. ==的使用

1.1 概述

用于基本类型比较值时:只要两个变量的值相等,即为true。

用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,==才返回true。

用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

1.2 代码演示

演示一:

?
1
2
3
4
5
6
7
8
9
10
11
//基本数据类型
        int i = 10;
        int j = 10;
        double d = 10.0;
        System.out.println(i == j);//true
        System.out.println(i == d);//true
        char c = 10;
        System.out.println(i == c);//true
        char c1 = 'A';
        char c2 = 65;
        System.out.println(c1 == c2);//true

演示二:

?
1
2
3
String str1 = new String("嘻嘻");
String str2 = new String("嘻嘻");
System.out.println(str1 == str2);//false

演示三:

?
1
2
3
4
        int i = 10;
        boolean b = true;
//      System.out.println(i == b);
// 报错: Operator '==' cannot be applied to 'int', 'boolean'

2. equals的使用

2.1 概述

是一个方法,而非运算符。

只能适用于引用数据类型。

Object类中equals()的定义:

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

说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。

像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。

通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写,重写的原则:比较两个对象的实体内容是否相同。

2.2 代码演示

演示一:

?
1
2
3
4
5
6
7
8
9
10
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.equals(p2));//false
//Person为自定义的类,没有对equals()进行重写
String str1 = new String("小老师ir");
String str2 = new String("小老师ir");
System.out.println(str1.equals(str2));//true
Date date1 = new Date(32432525324L);
Date date2 = new Date(32432525324L);
System.out.println(date1.equals(date2));//true

演示二:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Customer {
    private String name;
    private int age;   
@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Customer other = (Customer) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }  
}

3. ==和equals的区别

3.1 概述

== 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址。

equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals()方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

具体要看自定义类里有没有重写Object的equals()方法来判断。

通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

3.2 代码演示

?
1
2
3
4
5
6
7
8
9
10
11
12
int it = 65;
float fl = 65.0f;
System.out.println(“6565.0f是否相等?” + (it == fl)); //true
char ch1 = 'A';
char ch2 = 12;
System.out.println("65和'A'是否相等?" + (it == ch1));//true
System.out.println(“12和ch2是否相等?" + (12 == ch2));//true
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println("str1和str2是否相等?"+ (str1 == str2));//false
System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true
System.out.println(“hello” == new java.util.Date()); //编译不通过

到此这篇关于Java全面细致讲解==和equals的使用的文章就介绍到这了,更多相关Java ==和equals内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_52533007/article/details/124995068

延伸 · 阅读

精彩推荐
  • Java教程盘点MQ中的异常测试

    盘点MQ中的异常测试

    这篇文章主要为大家介绍了盘点MQ中的异常测试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    把苹果咬哭的测试笔记10362022-12-29
  • Java教程IDEA下从零开始搭建SpringBoot工程的方法步骤

    IDEA下从零开始搭建SpringBoot工程的方法步骤

    这篇文章主要介绍了IDEA下从零开始搭建SpringBoot工程的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    享学课堂11232021-06-28
  • Java教程超详细讲解Java秒杀项目用户验证模块的实现

    超详细讲解Java秒杀项目用户验证模块的实现

    这是一个主要使用java开发的秒杀系统,项目比较大,所以本篇只实现了用户验证模块,代码非常详尽,感兴趣的朋友快来看看...

    爱嘤斯塔9162022-10-08
  • Java教程Java高级面试题小结

    Java高级面试题小结

    本文主要介绍了一些在Java面试过程中的一些高级面试题,包括对部分名词的释义及代码解析,具有一定收藏价值,需要的朋友可以参考下...

    涛濤5502020-12-31
  • Java教程java基础-数组扩容详解

    java基础-数组扩容详解

    这篇文章主要介绍了Java数组扩容实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...

    haijiao121387312021-11-29
  • Java教程详解SpringBoot 统一后端返回格式的方法

    详解SpringBoot 统一后端返回格式的方法

    今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常,本文给大家介绍的非常详细,对大...

    田维常4642022-12-21
  • Java教程java使用电脑摄像头识别二维码

    java使用电脑摄像头识别二维码

    这篇文章主要为大家详细介绍了java使用电脑摄像头识别二维码,从摄像头获取图像,再根据图片解析出二维码信息,具有一定的参考价值,感兴趣的小伙伴...

    a1988081312212021-06-04
  • Java教程CountDownLatch:别浪,等人齐再团!

    CountDownLatch:别浪,等人齐再团!

    使用 CountDownLatch 可以实现等待所有任务执行完成之后再执行主任务的功能,它就好像比赛中要等待所有运动员都完成比赛之后再公布排名一样,当然我们在...

    Java中文社群6432021-03-31