==测试引用相等性(它们是否是同一个对象)。
.equals()测试值的相等性(它们在逻辑上是否“相等”)。
在调用.equals()之前,Objects.equals()会检查null,因此您不必(从JDK7开始,也可以在Guava中使用)。
String.contentEquals()将String的内容与任何CharSequence的内容(自Java1.5以来可用)进行比较。
因此,如果要测试两个字符串是否具有相同的值,则可能需要使用Objects.equals()。
//ThesetwohavethesamevaluenewString("test").equals("test")//-->true//...buttheyarenotthesameobjectnewString("test")=="test"//-->false//...neitherarethesenewString("test")==newString("test")//-->false//...butthesearebecauseliteralsareinternedby//thecompilerandthusrefertothesameobject"test"=="test"//-->true//...stringliteralsareconcatenatedbythecompiler//andtheresultsareinterned."test"=="te"+"st"//-->true//...butyoushouldreallyjustcallObjects.equals()Objects.equals("test",newString("test"))//-->trueObjects.equals(null,"test")//-->falseObjects.equals(null,null)//-->true
你几乎总是想使用Objects.equals()。在极少数情况下,您知道您正在处理实习字符串,您可以使用==。
==比较对象引用。
.equals()比较String值。
有时==会给出比较String值的幻想,如下列情况:
Stringa="Test";Stringb="Test";if(a==b)===>true
这是因为当您创建任何字符串文字时,JVM首先在字符串池中搜索该字面值,如果找到匹配项,则将为新字符串指定相同的引用。因此,我们得到:
(a==b)===>是的
StringPoolb----------------->"test"<-----------------a
但是,在以下情况下==失败:
Stringa="test";Stringb=newString("test");if(a==b)===>false
在这种情况下,对于newString("test"),将在堆上创建语句newString,并且该引用将被赋予b,因此b将在堆上给出引用,而不是在String池中。
现在a指向String池中的String,而b指向堆上的String。因此我们得到:
if(a==b)===>false。
StringPool"test"<--------------------aHeap"test"<--------------------b
虽然.equals()总是比较String的值,所以在两种情况下都给出了true:
Stringa="Test";Stringb="Test";if(a.equals(b))===>trueStringa="test";Stringb=newString("test");if(a.equals(b))===>true
所以使用.equals()总是更好。
文章部分资料来源:https://lkpmff.weebly.com/ 转载请注明
相关推荐
下面小编就为大家带来一篇老生常谈Java字符串进阶(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇老生常谈Java String字符串(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此...
自动装箱和拆箱问题是Java中一个老生常谈的问题了,我们来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 以下是本文的目录大纲:...
java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.com来解决问题。阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有...
函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 一、函数说明 语法:string.startswith...如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查 返回值 如果检测到字符串,则返回
下面小编就为大家带来一篇老生常谈java中的Future模式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java编码中的中文问题是一个老生常谈的问题了,但一直没有一个清晰的解释,本文作者将通过《java 中文乱码 解决之道》彻底分析、解决java中文乱码问题。
4.Python2与Python3中对字符串的支持 5.字符编码转换 一、前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章。有的人云亦云,也有的写得很深入。近日看到某知名培训机构的教学视频中再次...
老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说...毕竟我和各位都是人才,java知识底蕴不能如此短浅,这题还没谢幕我们还能对面试官多哔哔几句:字符串常量池在不同版本的jvm中
2 : 转换为字符串 3 : 数字转字符串 4 : 转换为数字 5 : 转换为Boolean 6 : Number()和parseInt()的区别 7 : String()和toString()的区别 1 : 伪对象 伪对象:javascript是一门很有意思的语言,即便是...
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。这篇文章主要介绍了老生常谈Java中instanceof关键字的理解,需要的朋友可以参考下
下面小编就为大家带来一篇老生常谈java中cookie的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java的堆是一个运行时数据区,类的对象从堆中分配空间。栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用,这篇文章给大家详细介绍java 堆和栈的概念和...
string 字符串 number 数字 beloon 布尔值 null undefined 引用数据类型包括: 对象数据类型 函数数据类型 对象数据类型又分为:数组[], 对象{}, 正则RegExp, 日期对象 对象数据类型存放在对内存中的步骤: 1....
下面小编就为大家带来一篇老生常谈java中的数组初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇老生常谈java路径中的反斜杠和斜杠的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇老生常谈java中的fail-fast机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇老生常谈 Java中的继承(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧