iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中==和equals()的区别有哪些
  • 931
分享到

Java中==和equals()的区别有哪些

2023-06-25 13:06:57 931人浏览 泡泡鱼
摘要

小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ==== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中1.1 基本数

小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1. ==

== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量引用数据类型变量

1.1 基本数据类型

Java基本数据类型共有八种,可以分为三类

  • 字符类型char

  • 布尔类型boolean

  • 数值类型byte、short、int、long、float、double

这里有个例外,boolean不参与数值运算

int a1 = 10;int a2 = 10;System.out.println(a1==a2);  //truefloat a3 = 5.0f;float a4 = 5.0f;System.out.println(a3==a4);  //true……

上面给出几组示例,相同数据类型可以相互比较不用多说了,那么不同数据类型呢?

int a1 = 10;byte b1 = 10;System.out.println(a1==b1);  //truechar c1 = 'A';int c2 = 65;System.out.println(c1 == c2);  //trueint a1 = 10;double d1 = 10.0d;System.out.println(a1==d1);  //trueint a1 = 10;char e1 = 10;System.out.println(a1==e1);  //true

可以看到,在基本数据类型的范围内,不同数据类型也是可以直接比较的

如果比较的是基本数据类型,就是判断两个保存的数据是否相同(不一定类型相同)

1.2 引用数据类型

这里先写一个Student类,用于参考

public class Student {    public String name;    public int age;    public Student(){}    public Student(String name, int age){        this.name = name;        this.age = age;    }}

实例化两个Student对象,判断是否相等

Student student1 = new Student("Tom", 18);Student student2 = new Student("Tom", 18);System.out.println(student1==student2);  //false

注意,这里出现了示例中的第一个false。可以看到,即使赋的值是相同的,但使用==判断的结果为false,这是因为两个对象在内存中不指向同一地址。

如果比较的是引用类型,就是比较两个变量是否代表同一对象实体,也就是是否指向同一地址

1.3 小结

==是运算符
可以使用在基本数据类型变量和引用数据类型变量中
如果比较的是基本数据类型,就是判断两个保存的数据是否相同,不一定类型相同
如果比较的是引用类型,就是比较两个变量是否代表同一对象实体,也就是是否指向同一地址

2. equals

equals()是方法,只能用于引用数据类型

还是使用上面介绍到的Student对象,如果使用equals比较,那么?

Student student1 = new Student("Tom", 18);Student student2 = new Student("Tom", 18);System.out.println(student1.equals(student2));  //false

答案还是false,我们可以看一下在此处使用的equals的源码

Java中==和equals()的区别有哪些

使用的正是Object中的equals()方法(继承),而Object中的equals()方法也是使用的==进行的比较

Object类中equals()和==的作用相同

诶,部分同学可能想说了,这个equals()和我们平时用的不太一样啊,平时用的equals()好像是用来比较数值的。这里我们拿String类来举例。

String str1 = new String("cun");String str2 = new String("cun");System.out.println(str1==str2);  //falseSystem.out.println(str1.equals(str2));  //true

使用==比较,不出意外是false。而这里使用equals(),得到的结果是true。我们看一下这里的equals()源码(Java8版本)

Java中==和equals()的区别有哪些

可以看到,String类中的equals()重写了Object类中的equals(),这里侧重于具体的数值比较(我们日常使用中也是更希望比较具体的数值)。分析一下源码,这里先使用==进行比较,然后判断是否为String的一个示例,判断长度是否相等,最后挨个判断字符是否相等。

源码的大部分程序都比较好理解,有些人比较迷惑这里的强制转换(如下图),既然前一句判断了是否为String类的实例,后一句为什么还要强转?这是因为,在Java中,代码从编写到执行要经历两个过程——编译和执行,在执行时,程序判断了实参是否为String类的实例对象,之后不再需要强转;但是在编译中,即使经历了instanceof判断,编译器还是会始终把传进来的参数当作Object类型,而Object类型是没有value属性的,会直接报错。所以在这里如果不强转,编译都通不过,更不用说执行了。

Java中==和equals()的区别有哪些

类似的,我们可以写出Student类中重写的equals()方法。

不过现在因为类使用的非常多,一方面是因为每个类都添加比较繁琐,另一方面我们可能写的可能不够健壮,这里提供两种方式自动提供equals()的重写

idea编译器的快捷键“alt + insert”,选择如下图的选项

Java中==和equals()的区别有哪些

选择需要添加到equals()的属性

Java中==和equals()的区别有哪些

可以看到自动生成的程序

@Overridepublic boolean equals(Object o) {    if (this == o) return true;    if (o == null || getClass() != o.getClass()) return false;    Student student = (Student) o;    return age == student.age &&        Objects.equals(name, student.name);}

导入lombok包,加入Data注解

@Datapublic class Student {    public String name;    public int age;    public Student(){}    public Student(String name, int age){        this.name = name;        this.age = age;    }}

可以看到重写了Object类中的equals()方法

Java中==和equals()的区别有哪些

3. 总结

看完了这篇文章,相信你对“Java中==和equals()的区别有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Java中==和equals()的区别有哪些

本文链接: https://www.lsjlt.com/news/305166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中==和equals()的区别有哪些
    小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ==== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中1.1 基本数...
    99+
    2023-06-25
  • java ==和equals的区别有哪些
    总结的来说:(1)对于==,比较的是值是否相等;如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。(2)对于equals方法,注意:equals方法不能作用于基本数据类型...
    99+
    2020-10-25
    java入门 java == equals 区别
  • hashCode()和equals()有哪些区别
    小编给大家分享一下hashCode()和equals()有哪些区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!两个对象hashCode()相同,equals()...
    99+
    2023-06-02
  • Java中==和equals有什么区别
    本文小编为大家详细介绍“Java中==和equals有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中==和equals有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。== 是 Java...
    99+
    2023-06-27
  • java equals和==的区别
    java9举例代码: (推荐学习:java课程)String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); String s...
    99+
    2015-02-02
    java入门 java
  • Java中equals和==的区别详解
    目录1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结1.java中的数据类型,可分为两类: 1.基本...
    99+
    2022-11-12
  • 详解Java中==和equals()的区别
    目录1. ==1.1 基本数据类型1.2 引用数据类型1.3 小结2. equals3. 总结1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用...
    99+
    2022-11-12
  • java中equals与“==”的区别
    区别:== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang....
    99+
    2017-05-07
    java equals == 区别
  • Java中的(==)与equals有什么区别
    本篇内容主要讲解“Java中的(==)与equals有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的(==)与equals有什么区别”吧!j...
    99+
    2022-10-19
  • Java详细解析==和equals的区别
    目录1、== 解析2、equals 方法解析3、equals方法具有以下特性1、== 解析 == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较; 如...
    99+
    2022-11-13
  • Java中使用==和equals的区别是什么
    这篇“Java中使用==和equals的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中使用==和equa...
    99+
    2023-06-29
  • javascript和java的区别有哪些
    这篇文章主要介绍了javascript和java的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Java 和 JavaScript 不同之处: ...
    99+
    2023-06-27
  • c#和java的区别有哪些
    Java和C#都是编程的语言,它们是两个不同方向的两种语言。相同点:他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装、继承、多态)。区别:1.c#中的命名空间是namespace类似于Java中的package(包),在J...
    99+
    2021-05-04
    java教程 c# java 区别
  • html5和java的区别有哪些
    html5和java的区别有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。html5和java的区别:1、java主要用来做andro...
    99+
    2022-10-19
  • node.js和java的区别有哪些
    这篇文章主要为大家展示了node.js和java的区别有哪些,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“node.js和java的区别有哪些”这篇文章吧。 ...
    99+
    2022-10-19
  • .net和java的区别有哪些
    .net和java的区别有:1.本质不同;2.应用领域不同;3.平台构架不同;4.运行环境不同;.net和java的区别有以下几点本质不同.net是一个跨语言的平台;而java是一个开源的跨平台的语言。应用领域不同.net主要应用于中小型公...
    99+
    2022-10-10
  • java和c++的区别有哪些
    这篇文章主要介绍java和c++的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:Java不可以将一个非布尔值当做布尔值在逻辑表达式中使用,C++却可以。C++引入了操作符重载机制,Java不支持。C+...
    99+
    2023-06-14
  • android中java和Kotlin的区别有哪些
    Android中Java和Kotlin是两种不同的编程语言。以下是它们之间的一些区别: 语法:Java使用较为繁琐的语法,而Ko...
    99+
    2023-10-25
    android java Kotlin
  • java中Pair和Map的区别有哪些
    这篇文章主要介绍了java中Pair和Map的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库...
    99+
    2023-06-14
  • java中LinkedHashMap和HashMap的区别有哪些
    这篇文章主要介绍了java中LinkedHashMap和HashMap的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java的优点是什么1. 简单,只需理解基本的...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作