== 与 equals 的区别?

这篇具有很好参考价值的文章主要介绍了== 与 equals 的区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 介绍:

   Java中的 "=="  是一个运算符,是用于比较两个对象地址值或基本数据类型之间的值是否相等。它的来源可以追溯到C语言,以及受C语言影响的许多其他编程语言。

   Java中的equals() 是一个方法,可重写该方法用于比较两个对象属性内容是否相等的方法。该方法继承自Object类,在Java的所有类中都可以使用。

 

二. 区别:

   1. 语法不同:

     == 是运算符 C语言编写的运算符;

     equals() 是Object类的方法;

 

   2. 作用不同:

    基本类型: == 是用来做值比较的,而equals()不能直接用于比较基本数据类型,需要转换为其对应的包装类型。

    引用类型: == 和 equals() 都可以比较栈内存中引用的地址值是否相等 。相等为 true 否则为 false,但是通常对某个类重写equals()方法,以自定义两个对象相等的条件(Object.equals() 是比较地址)。

 

三. 代码展示

public class User   {

    private String name;

// 略: 构造方法、getter、setter、toString()等
// 重写equals() 方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;  // 若地址值一致则直接返回 true
        if (o == null || getClass() != o.getClass()) return false;  // 若对象为null 或者 对象非同一个类,则直接返回false;
        User user = (User) o;  // 获取该对象,强转为user类
        return Objects.equals(name, user.name); // 使用equals 比较对象属性是否一致,返回结果true 或 false
    }
// 重写hashcode方法
    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

    public static void main(String[] args) {
        User u1 = new User("小米");
        User u2 = new User("小米");
        // 比较地址值
        System.out.println(u1 == u2);
        // 比较对象内容
        System.out.println(u1.equals(u2));
    }

输出结果:
    false
    true

    

  从代码上可以看出来在 new 新对象后,地址值是发生改变的,通过 == 运算符 或者 原生Object.equals() 方法,是不能判断对象的属性的,所以需要在该类重写equals()方法,使自定义类比较其值是否相等。

 

 

  文章来源地址https://www.toymoban.com/news/detail-542586.html

  

到了这里,关于== 与 equals 的区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中的运算符及算术运算符详解

    在C语言中,运算符是一种特殊的符号,用于表示数据的运算、赋值和比较等。本文将介绍C语言中的运算符,特别关注算术运算符,并提供一些示例来说明它们的用法。 C语言中的运算符可以按照其功能和操作数个数进行分类。以下是一些主要的运算符分类: 1. 按照功能分类

    2024年01月22日
    浏览(70)
  • C++ 中的运算符,包括三目运算符,关系和逻辑运算符,地址运算符等等(C++复习向p8)

    加减乘除 ±*/:略 取模运算符 %: 比如 10 % 4=2 自增运算符 ++:给自己加1 自减运算符 —:给自己减1 “==” 是否相等 “!=” 是否不等 “” 是否大于 “” 是否小于 逻辑与,如果2个都是true,条件才true || 逻辑或,两个有一个是true,就是true ! 逻辑非,true变成false,false变成t

    2024年02月07日
    浏览(49)
  • Java中的运算符--短路运算

    JAVA中有两个短路运算,一个是短路与,一个是短路或。 所谓短路,就是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数(可能是表达式)就不会执行。 短路与: 短路或: || 应用: 逻辑与、逻辑或都是自作向右计算。 两边同时为true,则为true。 有一方为fal

    2024年02月16日
    浏览(45)
  • PHP两个三元运算符“??” 和“?:”的用法和区别

    在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。 \\\"?:\\\"是三目运算符,语法格式为:$result = $test ? t e s t : ′ ′ ; 意思就是当 test:\\\'\\\';意思就是当 t es t : ′′ ; 意思就是当

    2024年03月17日
    浏览(47)
  • MySQL常用运算符详细介绍

     在 MySQL 中,可以通过运算符来获取表结构以外的另一种数据。例如,学生表中存在一个 birth 字段,这个字段表示学生的出生年份。如果想得到这个学生的实际年龄,可以使用 MySQL 中的算术运算符用当前的年份减学生出生的年份,求出的结果就是这个学生的实际年龄了。

    2024年02月08日
    浏览(45)
  • Dart 运算符重载,详细介绍

    Dart 支持运算符重载,它允许我们重载内置的运算符以执行自定义操作。在 Dart 中,我们可以通过实现一些特定的方法来重载运算符。 下面是一些常用的运算符和它们对应的 Dart 方法: + : operator +(Object other) `` : operator -(Object other) `` : operator *(Object other) / : operator /(Obje

    2024年02月08日
    浏览(40)
  • Verilog中的^~、~^、~&、~|运算符

    今天看书上的Verilog代码中,出现了运算符 ~^ ,从来没见过,搜了一些资料,记录一下。 ~^ 、 ^~ 作为二元运算符时,是同或; ~^ 、 ^~ 作为一元运算符时,是 缩减异或的取反 (感谢@smile、陌离老哥在评论区指正); ~ 只能作为一元运算符,是对缩减 结果的取反; ~| 只能作为

    2024年02月02日
    浏览(57)
  • C语言中的除法运算符“/”与取模运算符“%”:深入解析与示例

    🔥温馨提示🔥:使用电脑端阅读,获取更好体验🚀 在C语言中, / 和 % 运算符是与除法相关的两个运算符,它们有以下特点: / (除法运算符): 用途:计算两个数之间的除法。 结果类型:如果两个操作数都是整型,结果也将是整型,且向下取整(即忽略小数部分,也称

    2024年03月15日
    浏览(89)
  • Java中的运算符

      Java是一种强大的编程语言,其中运算符是编写代码时不可避免的一部分。运算符允许程序进行各种算术、逻辑和比较操作,以及数学函数。 算术运算符用于执行基本的算术运算,如加减乘除。下表列出了常见的算术运算符: 运算符 描述 + 加法 - 减法 * 乘法 / 除法 % 取模(

    2024年02月14日
    浏览(42)
  • Golang中的运算符

      目录 运算符 算术运算符 代码案例: 关系运算符 代码案例: 逻辑运算符 代码案例: 位运算符 代码案例: 赋值运算符 代码案例: 其他运算符 Go语言中的算术运算符包括加、减、乘、除和取模等。需要注意的是,除法运算符/和取模运算符%只能用于整数类型,而不能用于

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包