java ==和equals比较

ESP32蓝牙广播数据自定义指南:让你的设备更容易被手机发现 本文详细介绍了如何通过自定义ESP32蓝牙广播数据提升设备在手机端的可发现性。从广播数据结构、扫描响应优化到跨平台兼容性设置,提供了全面的技术指南和实战代码示例,帮助开发者解决智能硬件开发中的蓝牙连接难题。 阅读详情

java中equals方法和“==”的区别:

equals 方法是 java.lang.Object 类的方法。

有两种用法说明:

(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

“==”比较两个变量本身的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

比如:

String s1,s2,s3 = "abc", s4 ="abc" ;

s1 = new String("abc");

s2 = new String("abc");

那么:

s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,

故不相等。

s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。

注意(1):

如果: StringBuffer s1 = new StringBuffer("a");

StringBuffer s2 = new StringBuffer("a");

结果: s1.equals(s2) //是false

解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,

而Object类中的equals方法是用来比较“地址”的,所以等于false.

注意(2):

对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符

串常量所生成的变量,其中所存放的内存地址是相等的,

所以s3==s4是true(即使没有s3=s4这样一个赋值语句)

(2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其

对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

比如:

class A

{

A obj1 = new A();

A obj2 = new A();

}

那么:obj1==obj2是false

obj1.equals(obj2)是false

但是如加上这样一句:obj1=obj2;

那么 obj1==obj2 是true

obj1.equals(obj2) 是true

总之:equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较

其指向的对象是否相同的。

== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。

关于equals与==的区别从以下几个方面来说:

(1)如果是基本类型比较,那么只能用==来比较,不能用equals

比如:

public class TestEquals {

public static void main(String[] args)

{

int a = 3;

int b = 4;

int c = 3;

System.out.println(a == b);//结果是false

System.out.println(a == c);//结果是true

System.out.println(a.equals(c));//错误,编译不能通过,equals方法

//不能运用与基本类型的比较

}

}

(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。比如:

public class TestEquals {

public static void main(String[] args)

{ Integer n1 = new Integer(30);

Integer n2 = new Integer(30);

Integer n3 = new Integer(31);

System.out.println(n1 == n2);//结果是false 两个不同的Integer对象,故其地址不同,

System.out.println(n1 == n3);//那么不管是new Integer(30)还是new Integer(31) 结果都显示false

System.out.println(n1.equals(n2));//结果是true 根据jdk文档中的说明,n1与n2指向的对象中的内容是相等的,都是30,故equals比较后结果是true

System.out.println(n1.equals(n3));//结果是false 因对象内容不一样,一个是30一个是31

}

}

这是Integer的实例,如果是其他的比如Double、Character、Float等也一样。

(3)注意:对于String(字符串)、StringBuffer(线程安全的可变字符序列)、StringBuilder(可变字符序列)这三个类作进一步的说明。

(a)首先,介绍String的用法,请看下面的实例:

public class TestEquals {

public static void main(String[] args) {

String s1 = "123";

String s2 = "123";

String s3 = "abc";

String s4 = new String("123");

String s5 = new String("123");

String s6 = new String("abc");

System.out.println(s1 == s2);//(1)true

System.out.println(s1.equals(s2));//(2)true

System.out.println(s1 == s3);//(3)flase

System.out.println(s1.equals(s3));//(4)flase

System.out.println(s4 == s5);//(5)flase

System.out.println(s4.equals(s5));//(6)true

System.out.println(s4 == s6);//(7)flase

System.out.println(s4.equals(s6));//(8)flase

System.out.println(s1 == s4);//(9)false

System.out.println(s1.equals(s4));//(10)true

}

}

答案解释:s1与s2分别指向由字符串常量”123” 创建的对象,在常量池中,只有一个对象,内容为123,有两个引用s1和s2指向这个对象,故这两个引用变量所指向的地址是相同的,因而(1)处的运行结果为true,又因为s1.equals(s2)是比较s1和s2所指向的对象的内容是否相等,而我们知道这两个对象的内容都是字符串常量”123”,故标记(2)处的运行结果是true。

用同样的方法分析,s1和s3所指向的对象不一样,内容也不一样,故标记(3)和(4)处运行结果是false。

再看看s4和s5,这两个引用变量所指向的对象的内容都是一样的(内容都是123),但是这两个对象是用new操作符创建处类的,是在内存中分配两块空间给这两个对象的,因而这两个对象的内存地址不一样,故事两个不同的对象,标记(5)处的s4 == s5 运行结果为false,但是内容一样,故标记(6)处的s4.equals(s5)运行结果为true。同理,s4和s6所指向的对象地址不同,内容也不相同。故标记(7)(8)处运行结果为false。

s1和s4分别指向两个不同的对象(之所以这样称呼,是因为这两个对象在内存中的地址不相同,故而对象不相同),故标记为(9)处的s1 == s4运行结果为false,而标记为(10)处的s1.equals(s4)运行结果疑问:乍一看结果,有点惊讶,为什么不是true呢,不是说equals方法是比较内容的吗?

解释:不错,如果在新类中被覆盖了equals方法,就可以用来比较内容的。但是在上面的例子中类Value并没有覆盖Object中的equals方法,而是继承了该方法,因此它就是被用来比较地址的,又v1和v2的所指向的对象不相同,故标记(1)处的v1.equals(v2)运行结果为false,标记为(2)处的v1 == v2运行结果也为false。

MediaCreationToolW11:Windows11系统升级与修复利器 在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。 阅读详情

相关推荐

用UltraISO制作镜像以RAW格式刻录系统到U盘后,在Windows上无法识别的解决办法

在这篇文章中,用UltraISO制作镜像后,会使得U盘无法识别!!!那么,如何抹掉U盘的数据,格式化U盘呢?

拥抱具身智能,昇腾Ascend C 2730

equals方法的用法以及==的用法

equals 方法是 java.lang.Object 类的方法。 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。 “==”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。 比如: String s1,s2,s3 = "abc", s4 ="...

weixin_33755554的博客 3086

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 362

Java中的equals方法详解:比较方法

如果不覆盖equals方法,则调用该方法时会使用继承的Object类的实现,这种默认实现无法提供正确的比较行为,因为它无法知道哪些属性或状态在两个对象中是必须相同的。在这个例子中,a和b是两个不同的Integer对象,虽然它们的值相同,但是它们指向的是不同的对象,因此使用==运算符比较时返回false。3)传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,y.equals(z)也返回true,那么x.equals(z)也应该返回true;

weixin_62458944的博客 1万+

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作

本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。

weixin_28826521的博客 447

Java中equals()方法的理解与使用

在Java中,`equals()`方法是用于比较两个对象是否相等的重要方法。它属于`Object`类的方法,因此所有的Java对象都继承了这个方法。但是,`Object`类中的`equals()`方法默认实现是比较两个对象的引用是否相同,即它们是否指向内存中的同一个对象。在实际开发中,我们往往需要根据对象的实际内容来判断是否相等,这时就需要重写`equals()`方法。

qq_36720723的博客 7161

接口操作MySQL跟MongoDB事务回滚问题

通常使用的事务注解:@Transactional 是不会对MongoDB生效的,但是在一些生产接口中无法避免同时使用MySQL跟MongoDB的操作。

weixin_45932023的博客 1578

java中equals()方法的使用

java中equals()方法的使用

qq_49004189的博客 9367

大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署

本篇文章介绍了如何调用 OpenAI、DeepSeek、Manus、通义千问等大模型 API,并探讨了 LLM 本地部署的方法。在实际应用中,可以根据需求选择云端 API 或本地化部署方案,以满足不同的计算需求和隐私要求。下一篇:大模型微调与 RAG 技术(LoRA、QLoRA、向量数据库)

晴天彩虹雨的博客 1156

让 VK31 的条件维护树长出你想要的分支:用 ABAP SE43 扩展定价 Area Menu COND_AV

摘要:本文深入解析了SAP系统中价格条件维护(VK31/VK32)的菜单结构优化方法。通过分析Area Menu(COND_AV)的三层架构(菜单对象、节点、报表),提出将业务语言融入菜单设计的解决方案。重点介绍了使用SE43事务码扩展标准菜单的具体步骤:创建Enhancement ID、新增业务节点、挂接定价报表,并强调需同步验证条件表映射关系。文章还提供了常见问题排查思路,建议从岗位视角重构菜单结构,最终实现高效、精准且符合业务语义的价格维护入口体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 87

Java中的equals方法

解释:this指的就是当前对象,this是指equals方法是谁调用的,上面的hello调用的equals,所以this指的是字符串hello,而==右边的obj对象,是传入的abc。Object类中的equals方法默认就是比较对象地址是否相同。"=="是一个比较运算符。

SakuraMG的博客 1万+

1、动作捕捉技术:概述与历史

本博文全面介绍了动作捕捉技术的概念、历史演变、类型分类以及完整的工作流程。从早期的连续摄影技术到现代数字动作捕捉系统,文章深入探讨了光学、磁性和机械动作捕捉系统的优缺点及适用场景,并详细解析了动作捕捉数据的生成原理与数学基础。此外,还涵盖了特殊部位如手部、面部和木偶的动作捕捉方法,并讨论了动作捕捉在动画制作、虚拟现实、医疗康复等领域的广泛应用与发展前景。

apple5的专栏 219

Java中的 == 和 equals比较

== 和 equals == ==比较分为两种情况: 基本数据类型比较的是两者的值 int a = 10; double b = 10.0; long c = 10.0L; System.out.println(a==b); //true System.out.println(b==c); //true 基本数据类型存储于内存的栈中,赋值时先在栈中寻找是否有存有该值的地址,若有,则指向该地址...

玖贰柒的博客 258

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java:String类型比较,equals和==比较的区别

String使用"=="操作符的作用 用于基本数据类型的比较 判断引用是否指向堆内存的同一块地址。 String的equals方法 equals方法在Object类当中,而Object是所有类的父类 public boolean equals(Object obj) { return (this == obj); } 而String对equals方法进行了重写。 pub...

qq_37476266的博客 9968

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java ==和equals的区别_java中==和equals比较

网上搜了一遍,对于==和equals的表达感觉不全面;总感觉缺点什么;今天把这个比较总结出来三条规律。结论1.基本类型没有equals方法,只有==比较,比较的是值。结论2.所有对象的==比较都是内存地址的比较(上面的两点简单不介绍了)首先我们看Integer类的比较。1 Integer a=1000;2 Integer b=1000;3 System...

weixin_42623010的博客 140

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java:String使用equals和==比较的区别

"=="操作符的作用 1、用于基本数据类型的比较 2、判断引用是否指向堆内存的同一块地址。 equals所在位置: 在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写 public boolean equals(Object obj) { return (this == obj); } equals的作...

越来越好ing的博客 6万+

java equals == 比较_java中equals方法和“==”的比较

equals方法是java.lang.Object类的方法。有两种用法说明:(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。比如:String s1,s2,s3 = "abc", s4 ="abc" ;s1 = new String("...

weixin_39970166的博客 171

java equals( )_Java中equals()和==的比较

Java中的equals()和==比较是个基础问题,之前在项目中也犯过错,简单对比一下。Object类的equals()和==Object类的equals()是比较两个对象内存地址是否相同,==也是一样。equals1.jpg也就是如果object1.equals(object2)为true,那么object1和object2实际引用的是同一个对象。String类的equals()和==比较Str...

weixin_34360879的博客 188

java equals == 比较_java用equals和==比较两个对象

一、概述我建立了一个String字段的类。然后,我创建了两个对象,我也必须使用==运算符对其进行比较.equals()。这是我所做的:public class MyClass {String a;public MyClass(String ab) {a = ab;}public boolean equals(Object object2) {if(a == object2) {return tru...

weixin_28745975的博客 216

java 字符串比较 == equals_java之从字符串比较到==和equals方法区别

我们先看代码String str1 = new String("hello");String str2 = "hello";System.out.println("str1==str2: " + (str1==str2));\\1System.out.println("str1.equals(str2): " + str1.equals(str2));\\2输出结果:str1==str2: fal...

weixin_28949743的博客 105

java equals == 比较_【Java】Java中equals和==的比较

看了男盆友的代码,看到了中间的有使用equals方法,然后百度了一下这个方法,发现大部分人都是用==和它进行比较,原来这两个方法的作用很类似。总结来说:1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;比如:int n=3;int m=3;System.out.println(n==m);结果显示就是true。如果作用于引用类型的变量,则比较的是所指向的对象的地址比如...

weixin_42162216的博客 184

Java中String使用equals和==比较的区别

文章目录前言一、== 操作符的作用二、equals 方法所在位置三、equals 作用四、equals 基本使用五、在String类中的使用1.对象不同,内容相同2.同一对象3.作为基本类型来使用六、具体分析1.JVM内存(栈内存、堆内存)2.Object equals()3.String equals()4.案例分析总结 前言 搞清楚原理,工作中灵活运用,面试加分。 一、== 操作符的作用 用于基本数据类型的比较 判断引用地址是否指向堆内存的同一块内存地址 二、equals 方法所在位置 在Obj

dingwen 636

java中==和equals的比较和区别

对于JAVA初学者关于==,和equals很难去区分,因此在这里做一下总结,以供参考。 当比较的类型是基本类型时: 只有==,不存在equals,变量比较的都是值 int x=100; int y=x; int z=100; System.out.println(x==y);//true System.out.println(x==z);//true System.out.println(y==z);//tr

weixin_46760335的博客 285

java中的==和equals比较

结论: 对“==”而言: 1、基本数据类型:比较的是他们的值是否相等; 2、引用数据类型:比较的是两个对象的地址是否一致。 对“equels”而言: 默认情况下,和“==”一样,比较的是地址值,但是如果重写了equels()方法就按重写的来比较,比如:String类,Integer类,它们都重写了各自的equels()方法,所以比较的是两个对象的值是否相等。 举例: 一、关于int及其包装类int...

hhf06的博客 299

Java中比较两个字符串==和.equals()区别

在 Java 中,== 和 .equals() 都是用于比较两个字符串是否相等的运算符,== 比较的是两个字符串的引用地址,而 .equals() 比较的是两个字符串的内容。只有当两个字符串变量指向同一个字符串对象时,== 和 .equals() 才会返回相同的结果。

weixin_42098295的博客 1279
上一篇: @Pointcut的用法
下一篇: Java内部类总结
Java18
博客等级 码龄16年 27粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值