Java中equals()和==的区别

Java中的equals()与==的区别与用法 /如果当前字符串对象和传入的字符串对象的编码方式相同 if (coder() == aString.coder()) { //如果当前字符串和传入的字符串都是Latin1编码,则调用StringLatin1类的equals方法进行比较;} // 如果是String类型的实例 if (anObject instanceof String) { ////Object类型的对象强制转换为String类型 String anotherString = (String)anObject;// 输出 false。 阅读详情

1. 概述 

   《Java编程思想》:关系运算符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。也就是说==只是进行值之间的比较。

2. 从代码示例分析equals()与==

      1.关系运算符==的代码示例:

public class Main {

    public static void main(String[] args) {
        
        int n=6;
        int m=6;
        
        System.out.println(n==m);
        
        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello");
        
        System.out.println(str1==str2);
        
        str1 = str;
        str2 = str;
        System.out.println(str1==str2);
    }
}

输出的结果及解析:

true:对于基本数据类型的m和n存储的值都是常量3,所以相等

false:对于引用类型的str1和str2则保存的是不同对象对应的内存地址值,所以不同

true:此时的str1和str2保存的对象是同一个,故结果为true

综上所述:对于8种基本数据类型的变量,变量直接存储的是“值”,因此用关系操作符==进行比较时,比较的就是值的本身。

补充:

    在Java中的8种基本数据类型:

  浮点型:float(4 byte), double(8 byte)

  整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)

  字符型: char(2 byte)

  布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值"true"和"false")

       2. equals()代码示例

public class Main {

    public static void main(String[] args) {
    
        String str1 = new String("hello");
        String str2 = new String("hello");
        
        System.out.println(str1.equals(str2));
    }
}

结果:true

解析:首先equals方法是基类Object中的方法,因此只要继承Object的类中都会有该方法,Object类中的equals方法源码如下:

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

根据上述源码所示,在Object类中equals方法是用来比较两个对象的引用是否相等,及判断是否指向同一个对象,代码示例应该返回的为false,因为equals(Object obj)方法中是直接使用==比较的。

由于比较的类型是String,String中的equals()方法源码如下:

  public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

从源码可见,String类中对equals()方法进行了重写,由此方法可以看出,实际比较的是该引用指向地址中字符串是否相等。实际上诸如Double,Date,Integer等,都对equals()方法进行了重写用来比较指向的对象所存储的内容是否相等。

Integer重写后的equals()

    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

3. 总结

  1. 对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的所在的内存地址。

  2. 对于equals方法,注意:equals方法不能作用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

 

 

强化学习:在智能交通系统中的应用 作者:禅与计算机程序设计艺术 这篇文章将探索如何利用强化学习(RL)这一强大的机器学习方法,在智能交通系统中实现自动驾驶、优化路线规划和提高道路安全等方面的突破。RL通过让智能体与环境互动并从这些互动中学习,从而解决复杂的决策过程问题,这正是现代智能交通系统所需要的。 背景介绍 随着城市化进程的加速,交通拥堵、能源消耗和交通事 阅读详情

相关推荐

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 226

Java中==和equals()的区别

1.定义不同 equals()是Java中的一个方法 ==在Java中只是运算符号 2.比较的对象不同 1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。是判断两个变量或实例所指向的内存空间的值是不是相同。 2、 ==:用于比较引用和比较基本数据类型时具有不同的功能。 对于引用类型来说, ==进行的是地址值的比较 对于基本类型来说,==是进行数值的比较。 3 .运行速度不同 1、equals():没有==运行速度快。 2、== :运行速度比equals()快,因为==只是比较引用

weixin_46503633的博客 674

知识推理——TransE(知识表示、知识嵌入)

知识图谱嵌入/表示方法 TransE

missyoudaisy的博客 1831

Java中==和equals的区别

==操作符与equals方法的区别

骑个小蜗牛的博客 4万+

SpringBoot+Vue实现图片上传

SpringBoot+Vue实现图片上传

叶♥璃 2735

ZStack云平台从零部署:ISO安装与初始化实战指南

本文详细介绍了ZStack云平台的从零部署过程,包括ISO安装与初始化配置的实战指南。从硬件环境准备、ISO镜像安装到云平台初始化,逐步解析关键步骤与常见问题解决方案,帮助用户快速搭建私有云环境。特别针对网络配置、存储选择和云主机创建等核心环节提供实用技巧,适合云计算初学者和运维人员参考。

moon9的博客 642

【Java】==和equals的区别

哈希表允许哈希冲突(即不同的对象具有相同的哈希值),并通过链表或红黑树等机制处理冲突。都用于比较对象,但它们的行为和用途有显著的区别。不同,哈希表可能会将它们存储在不同的位置,导致查找失败或行为异常。不同,哈希表会将它们存储在不同的位置,导致查找失败。时,建议将常量或已知非空的对象放在前面。:比较对象的内容(默认比较引用,可重写)。计算对象的哈希值,确定存储位置(桶)。类中定义的方法,用于比较两个对象的。:比较基本数据类型的值或对象的引用。(即内存地址),而不是对象的内容。比较对象内容,找到匹配的对象。

Eurekame2000的博客 2982

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 497

java中equals和==的使用区别

在比较equals和==之前我们先了解一下equals: 了解equals() equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。我们观察源码: 很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。但是我们发现以下代码输出结果为true。 String a = new String("aaa"); String b = new String("aaa"); System.out.println(a.e.

x瓜皮的博客 2130

Sentinel2 哨兵2数据下载方法(USGS)-史上最全讲解

本文讲述了从USGS官网下载Sentinel2的方法。主要包括USGS官网的注册和下载流程,以及选定研究区中所出现的问题、解决办法。

xiatiandexia123的博客 6万+

Claude Code Agents 进阶:多代理协作与任务委托

Agent 是一个独立运行的 Claude 实例,它有自己的上下文和任务焦点。│ 主 Claude ││ (协调者) ││ │ │▼ ▼ ▼│ 代码审查 │ │ 测试生成 │ │ 文档编写 ││ │ ││▼汇总结果,完成任务并行处理:多个 Agent 同时工作,提高效率任务隔离:每个 Agent 有独立的上下文专业分工:不同类型的 Agent 擅长不同任务灵活控制:可以指定运行模式、超时等参数。

gaoxiang_120的专栏 336

Java 的 == 和 equals 的区别是什么

Java 的 == 和 equals 的区别是什么

杨荧的优快云博客 640

芒果YOLO11改进12:即插即用 | 独家原创改进最新PWConv核心结构|来自最新CVPR2023顶会,

即插即用 | 独家原创改进最新PWConv核心结构|来自最新CVPR2023顶会,

包括YOLOv5、YOLOv7、YOLOv8等模型改进 569

​Java中==和equals()的区别

在Java中,==和equals()用于比较操作,但它们的用途和行为有本质区别。==用于基本数据类型的值比较和引用类型的内存地址比较,而equals()默认比较内存地址,但可重写以比较内容。重写equals()时必须同时重写hashCode(),以确保哈希集合(如HashMap、HashSet)的正确行为。

weixin_74120671的博客 936

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

在JAVA中==和equals()的区别

编程是这样的,最开始看山是山,后来看山不是山,再后来我就不知道了,目前还在学习,欸嘿,好好学习吧各位,兴趣是最好的老师。

sh12123086的博客 869

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java中equals()方法和==的区别

==有两种比较方式,比较基本类型的数值和比较引用类的地址。 equals()方法默认是以==来实现,我们也可以在平常的需求中重写equals()方法。

Cirmaster的博客 349

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java基础:equals()方法与==的区别

euqals和==区别介绍

愿你我都能实现自己的梦想 1356

Java 中 == 与 equals() 的区别

Java中==与equals()的区别: ==用于基本类型比较值,引用类型比较内存地址 equals()是Object类方法,默认比较地址,但String/包装类等通过重写实现内容比较 关键区别:==判断"是否同一个对象",equals()判断"逻辑是否相等" 注意事项:字符串常量池、包装类缓存、equals与hashCode契约 实用建议:比较对象内容用equals(),基本类型用==,null安全比较推荐"常量.equals(变量)"

2303_77517907的博客 1064

Java基础:==与equals()的区别

Java基础篇:详细讲述了Java中==和equals()的不同之处

PeaK欢迎大家评论留言,一起交流Java技术 7794

浅谈Java中==和equals()区别

Java基础浅谈Java中==和equals()区别== 运算符equals(): 方法 浅谈Java中==和equals()区别 == 运算符 可以使用在基本数据类型变量和引用数据类型变量中 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定要类型相同) 如果比较的是引用类型变量,比较的是两个变量的地址值是否相同,即两个引用是否指向同一个对象实体 equals(): 方法 只能适用于引用数据类型 在object中定义的equals()方法与==的作用是一样的,在String类中对e

klionl的博客 538

java中==和equals()区别

所以用==比较结果可能是false。比如:textview1和textview2的text都是1,但textview1.gettext()==textview2.gettext()值就为false.如果一边是实际值,如num==2,str=="aaa",效果跟equals()一样。equals()比较的是值。==比较的是值存储的地址。

kim5659的博客 295

Java面试-== 和 equals() 方法的区别与实现原理

但很多类(如StringIntegerList)都重写了equals(),让它比较内容而不是引用。equals()场景推荐做法原因比较基本类型使用==直接比较数值比较引用类型是否为同一对象使用==检查内存地址比较对象内容是否相等使用equals()逻辑相等性自定义类正确重写equals()和hashCode()确保在集合中正常工作比较字符串内容使用equals()安全、可靠字符串常量比较可用==(但不推荐)因为常量池,但行为不稳定性能敏感代码避免不必要的equals()

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

java中==和equals()的区别

java中==和equals()的区别 本人是个菜鸟小白,每天都在一点点学习,最近遇到这种问题,今天来讨论一下… 一、先来说说Java的基本数据类型和引用类型 Java中有八大基本数据类型:byte,short,int,long,double,folat,boolean,char 其中占1个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean占1位,只有true和false,这八种数据变量中直接存储值 八大基本数据类型对应着各自的封

Zzz的博客 256

Java 中 == 和 equals() 的区别

的区别是 Java 面试常见考点,也是避免逻辑错误的关键!如果需要比较内容(如字符串、集合):用。一样(比较内存地址),但许多类(如。如果需要比较地址(如单例模式):用。可能指向同一对象(常量池)。(除非明确需要比较地址)。一致性:多次调用结果不变。类的方法,默认实现和。,用于比较两个变量的。

Littlegarbage_的博客 553

Java中==和equals()的区别?

比较项==运算符equals()方法基本类型比较值不适用(只能用于对象)引用类型比较对象地址默认比较地址,但通常被重写为比较内容可否被重写❌ 不可重写✅ 可以重写(推荐对自定义类也进行重写)安全性无需担心空指针异常调用前应确保对象不为 null,否则抛出 NullPointerException常见用途判断是否是同一个对象判断两个对象的内容是否逻辑上相等equals()如果你自己写的类希望支持有意义的equals()重写方法。(推荐)同时重写hashCode()

weixin_61523952的博客 533
上一篇: Java中的自动装箱拆箱
下一篇: Java语言的特性及上转型对象
至学者
博客等级 码龄9年 180粉丝 773原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值