`
银辰宇
  • 浏览: 4346 次
文章分类
社区版块
存档分类
最新评论

老生常谈:如何比较Java中的字符串?

阅读更多

  ==测试引用相等性(它们是否是同一个对象)。

  .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字符串进阶(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈Java String字符串(必看篇)

    下面小编就为大家带来一篇老生常谈Java String字符串(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java中文问题及最优解决方法

    由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此...

    深入剖析Java中的装箱和拆箱

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,我们来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:...

    Java中文乱码解决之道

    java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.com来解决问题。阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有...

    老生常谈Python startswith()函数与endswith函数

    函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 一、函数说明 语法:string.startswith...如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查 返回值 如果检测到字符串,则返回

    老生常谈java中的Future模式

    下面小编就为大家带来一篇老生常谈java中的Future模式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java 中文乱码解决之道 - v1.0.pdf

    java编码中的中文问题是一个老生常谈的问题了,但一直没有一个清晰的解释,本文作者将通过《java 中文乱码 解决之道》彻底分析、解决java中文乱码问题。

    再谈Python中的字符串与字符编码(推荐)

    4.Python2与Python3中对字符串的支持 5.字符编码转换 一、前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章。有的人云亦云,也有的写得很深入。近日看到某知名培训机构的教学视频中再次...

    String s = new String(” a “) 到底产生几个对象?

    老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说...毕竟我和各位都是人才,java知识底蕴不能如此短浅,这题还没谢幕我们还能对面试官多哔哔几句:字符串常量池在不同版本的jvm中

    老生常谈javascript的类型转换

    2 : 转换为字符串  3 : 数字转字符串  4 : 转换为数字  5 : 转换为Boolean  6 : Number()和parseInt()的区别  7 : String()和toString()的区别 1 : 伪对象 伪对象:javascript是一门很有意思的语言,即便是...

    老生常谈Java中instanceof关键字的理解

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。这篇文章主要介绍了老生常谈Java中instanceof关键字的理解,需要的朋友可以参考下

    老生常谈java中cookie的使用

    下面小编就为大家带来一篇老生常谈java中cookie的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈之Java中堆和栈的概念和区别

    Java的堆是一个运行时数据区,类的对象从堆中分配空间。栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用,这篇文章给大家详细介绍java 堆和栈的概念和...

    老生常谈js数据类型

    string 字符串 number 数字 beloon 布尔值 null undefined 引用数据类型包括: 对象数据类型 函数数据类型 对象数据类型又分为:数组[], 对象{}, 正则RegExp, 日期对象 对象数据类型存放在对内存中的步骤: 1....

    老生常谈java中的数组初始化

    下面小编就为大家带来一篇老生常谈java中的数组初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈java路径中的反斜杠和斜杠的区别

    下面小编就为大家带来一篇老生常谈java路径中的反斜杠和斜杠的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈java中的fail-fast机制

    下面小编就为大家带来一篇老生常谈java中的fail-fast机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈 Java中的继承(必看)

    下面小编就为大家带来一篇老生常谈 Java中的继承(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics