一. 介绍:

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

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

二. 区别:

   1. 语法不同:

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

     equals() 是Object类的方法;

   2. 作用不同:

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

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

三. 代码展示

  1. public class User {
  2.  
  3. private String name;
  4.  
  5. // 略: 构造方法、getter、setter、toString()等
  6. // 重写equals() 方法
  7. @Override
  8. public boolean equals(Object o) {
  9. if (this == o) return true; // 若地址值一致则直接返回 true
  10. if (o == null || getClass() != o.getClass()) return false; // 若对象为null 或者 对象非同一个类,则直接返回false;
  11. User user = (User) o; // 获取该对象,强转为user类
  12. return Objects.equals(name, user.name); // 使用equals 比较对象属性是否一致,返回结果true 或 false
  13. }
  14. // 重写hashcode方法
  15. @Override
  16. public int hashCode() {
  17. return Objects.hash(name);
  18. }
  19. }
  20.  
  21. public static void main(String[] args) {
  22. User u1 = new User("小米");
  23. User u2 = new User("小米");
  24. // 比较地址值
  25. System.out.println(u1 == u2);
  26. // 比较对象内容
  27. System.out.println(u1.equals(u2));
  28. }
  29.  
  30. 输出结果:
  31. false
  32. true

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

  

  

== 与 equals 的区别?的更多相关文章

  1. Java学习笔记——双等号和equals的区别

    一.==和equals的区别 1. ==可以用来比较基本类型和引用类型,判断内容和内存地址 2. equals只能用来比较引用类型,它只判断内容.该函数存在于老祖宗类 java.lang.Object ...

  2. java中的==和equals的区别

    关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...

  3. android错误之==与equals的区别

    在做一个电话号码匹配的时候, 开始我使用的是这种情况 if (num == inCall.getNum()) { //操作... } 但是无论如何结果都是false,就算两个号码打印出来一模一样还是f ...

  4. Java基础系列之你真的懂==与equals的区别吗?

    对于Java初学者而言,可能会对这两个比较方法比较模糊,有的人可能会觉得两个的方法使用起来结果是一样的等.如果你有这样的想法,我建议你来看看这边博客,让你充分了解这两个比较的异同,以及他们底层是如何比 ...

  5. Java 中 == 和 equals 的区别

    有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...

  6. java 的==和equals的区别(二)

    java 的==和equals的区别 java 的==和equals的区别 ==通常表明引用的是同一个东西(引用的地址相同),equals通常表明两个对象的内容相同(值相同) ------------ ...

  7. equals与==区别

    equals与==区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间 ...

  8. “==”与equals的区别

    “==”与equals的区别: “==”:两个对象比较的是对象的引用地址比较,对象的hashCode值是对象的引用地址,只有两个对象的hashCode值一样,此比较符才会返回true,否则即使两个对象 ...

  9. 浅谈==和equals的区别

    java中的==和equals的区别? 看上面的代码,输出的结果是: true false true true 1.为什么会有上面的区别呢?==和equals比较的到底是什么呢? 搞清楚两者的区别其实 ...

  10. Java中Object.equals和String.equals的区别详解

    前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我们通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态 ...

随机推荐

  1. 看了绝对不会忘的 去中心化金融 - DeFi

    DeFi Decentralized Finance, 去中心化金融,主要就是 以区块链技术为载体的金融模式. 注意:区块链是一种技术,而比特币是一种应用. Terminology fungible ...

  2. java LocalDateTime的使用

    1.LocalDateTime的基本使用 //获取当前时间 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println( ...

  3. [C++提高编程] 3.5 stack容器

    文章目录 3.5 stack容器 3.5.1 stack 基本概念 3.5.2 stack 常用接口 3.5 stack容器 3.5.1 stack 基本概念 概念:stack是一种先进后出(Firs ...

  4. 【配置教程】撑起月6亿PV开源监控解决方案

    上次分享过<一个.Net Core开源监控解决方案,支持Redis.Elasticsearch.SqlServer>,这是Stack Overflow 开源的监控产品,基于.Net Cor ...

  5. Django笔记三十七之多数据库操作(补充版)

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十七之多数据库操作(补充版) 这一篇笔记介绍一下 Django 里使用多数据库操作. 在第二十二篇笔记中只介绍了多数据库的定义.同步命令 ...

  6. JS中内存泄漏的几种情况

    JavaScript 中的内存泄漏是指程序中使用的内存不再被需要却没有被释放,最终导致浏览器或者 Node.js 进程使用的内存越来越大,直到程序崩溃或者系统运行缓慢. 在 JavaScript 中, ...

  7. 2020-12-19:系统load过高,你怎么去查?

    福哥答案2020-12-20:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/800)1.top命令查看该机器的负载状况.2.cd /proc/pid ...

  8. 2022-06-24:golang选择题,以下golang代码输出什么?A:1;B:3;C:4;D:编译失败。 package main import ( “fmt“ ) func mai

    2022-06-24:golang选择题,以下golang代码输出什么?A:1:B:3:C:4:D:编译失败. package main import ( "fmt" ) func ...

  9. openstack部署2

    检查服务,查看dashboard页面有哪些功能 检查服务状态 检查计算节点,控制节点服务是up状态 检查网络节点是True的状态.这里的每个计算节点,都是一个neutron的客户端. 查看dashbo ...

  10. django视图中使用return redirect(reverse('')) 没有传参出现题:Reverse for ‘‘ with no arguments no arguments not

    redirect 的作用是跳转 reverse的作用是反向解析 当无法反向解析的时候要确认urls.py中的path参数,name参数是否一直