问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

比较字符串是等号和equal有什么区别

发布网友 发布时间:2023-08-08 23:19

我来回答

2个回答

热心网友 时间:2023-09-28 13:02

Java中equals和==的区别

java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

1 public class TestString {
2 public static void main(String[] args) {
3 String s1 = "Monday";
4 String s2 = "Monday";
5 if (s1 == s2)
6 {
7 System.out.println("s1 == s2");}
8 else{
9 System.out.println("s1 != s2");}
10 }
11 }

编译并运行程序,输出:s1 == s2说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!
2.再稍微改动一下程序,会有更奇怪的发现:

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}

我们将s2用new操作符创建
程序输出:
s1 != s2
s1 equals s2
说明:s1 s2分别引用了两个"Monday"String对象

3. 字符串缓冲池
原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1
将s2引用s1所引用的对象"Monday"
第二段程序中,使用了 new 操作符,他明白的告诉程序:"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。他们的值相同,但是位置不同,一个在池中游泳一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?

4.再次更改程序:

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
s2 = s2.intern();
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}

这次加入:s2 = s2.intern();
程序输出:
s1 == s2
s1 equals s2
原 来,(java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方 法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。

热心网友 时间:2023-09-28 13:02

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

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

比如:

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

s1 = new String("abc");

s2 = new String("abc");

那么:

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

故不相等。

s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
悲观的意思是什么悲观是什么意思 ...坐立不安的。还总想挠挠手呀、胳膊什么的。这是怎么回事啊?是一种... ...胳膊肘麻,有时会麻到感觉大拇指根部疼,食指也有点... ...入睡感觉左胳膊从手腕到肩膀酥溜溜的酸,睁开眼又好了,什么原因... 胳膊上麻溜溜的 像是有小疙瘩 还很痒 有点硬 少量蔗糖,食盐,食油,食醋分别倒入一定量水中,并用筷子不断搅拌,观察... 将食盐 蔗糖 泥土 植物油与水混合 英文会计的provision对应中文会计的哪个词啊? 双人旁一个直一个心念什么,什么意思 白瓷有隙是成语吗 藤野造型在美团不打折? 江思先生在哪看 鸿蒙系统相册上滑识别人像 java能不能像C语言那样定义一个宏常量?或者说java能不能定义一个常量,在整个文件中随意方便使用? 宏常量定义与函数问题 深信服PDLAN是什么 pdlan,mdlan,sdlan分别是什么意思? 工商管理和公共管理哪个好 中南财经政法大学公共管理类专业分流选什么专业最好 公共管理类最吃香的专业 英雄联盟符文有时间*的吗》?我用游戏币买了符文,然后保存了,到了第二天符文消失了有时间*的吗? 英雄联盟符文,天赋莫名消失 为什么我英雄联盟符文一个都不见了 win10安装vmwareworkstation提示无法将网络更改为桥接状态:没有未桥接的主机网络适配器怎么办 挂耳染发教程是怎么样的 在德国我遇到了经济困难,怎么求助中国的老乡帮忙 在淘宝代购店买到了假货,上面写了七天无理由退货,可是下面买家必读又写了不退不换,卖家不退怎么办 为什么我编辑的买家必读插入都是在宝贝描述最上面,我要最下面怎么设置 刚开了个淘宝网基本装修都知道了就不知道在店铺招牌下加一个 买家必读 装修上没有啊想增加一个买家必读 怎 商标交易泉州买家必读 喝白醋什么时候喝最好 叶茂是什么生肖 拼多多有赵培培名字如何跟她联系 电话名字可以找到本人淘宝或者是拼多多吗? 跑800跑不下去的时候,最好给自己怎样的心里暗示? 怎样克服跑800米的一些心里障碍 还有跑800米的一些技巧 急。在线等! 爱丽舍p3011故障码是什么意思 电动汽车无法启动,系统故障灯点亮,电池故障灯点亮,上位机读取故障码为P3011,故障原因? ECM3011是什么故障码怎样解决 东风标致307故障码p3011代表什么 南充混电车能办理运营证嘛 去青岛金沙滩要准备什么 去黄岛金沙滩需要带什么? 青岛黄岛香江路太行山路口莫泰168(交通局)到黄岛金沙滩乘几路公交车?怎么走?要不要带泳衣?希望详细点 去青岛金沙滩需要带什么 企业进口设备支付了90%货款10%未支付,按购入汇率折算人民币固定资产剩余未支付设备款挂账应付账款? 办plc培训班需要什么资质 歌手唱歌时的舞曲背景音乐是啥谁知道? 唱歌背景音乐放不出来 我像一个经常联系的朋友借500块钱然后说转钱给他打过去然后他就没有回复信息+?