当前位置:   article > 正文

java两个stringequal和h_如何在 JAVA 中比较两个 String 对象

java两个stringequal和h_如何在 JAVA 中比较两个 String 对象

如何在 JAVA 中比较两个 String 对象

问题

最近写程序的时候, 遇到了需要比较两个 String 对象是否相等的情况, 我习惯性的写了形如 if(a == "a"){} 的语句, IDEA 跳出警告, 内容如下:

String values are compared using '==', not 'equals()'.

也就是说我刚刚那句话应该写成 if(a.equals("a")){} 才对, 果然不再标红了.

说明

那么, 为什么会这样呢?== 和 equals() 分别是什么效果呢?

对于基本数据类型 byte(字节型),short(短整型),int(整型),long(长整型),float(单精度浮点型),double(双精度浮点型),boolean(布尔型),char(字符型),== 比较的就是他们的值, 也不存在 equals() 方法.

而对于 String 这样的引用数据类型,== 比较的是两个对象的 引用地址 即内存地址是否相同, 如果内存地址相同, 自然就是同一个对象了, 同一个对象之间有啥好比的.

我们一般的应用场景主要是要比较两个 String 对象的内容, 那就需要使用 equals() 方法. 我们可以看一下 java.lang.String 中 equals() 方法的定义, 可以看到 equals() 才是在比较两个 String 对象的值./**

* Compares this string to the specified object. The result is {@code

* true} if and only if the argument is not {@code null} and is a {@code

* String} object that represents the same sequence of characters as this

* object.

*

* @param anObject

* The object to compare this {@code String} against

*

* @return {@code true} if the given object represents a {@code String}

* equivalent to this string, {@code false} otherwise

*

* @see #compareTo(String)

* @see #equalsIgnoreCase(String)

*/

publicBooleanequals(ObjectanObject){

if(this==anObject){

returntrue;

}

if(anObjectinstanceofString){

StringanotherString=(String)anObject;

intn=value.length;

if(n==anotherString.value.length){

charv1[]=value;

charv2[]=anotherString.value;

inti=0;

while(n--!=0){

if(v1[i]!=v2[i])

returnfalse;

i++;

}

returntrue;

}

}

returnfalse;

}

还有一个特例的情况, 比如 "abcde" == "abcde" 或是 "abcde" == "abc" + "de" 都是会返回 true 的, 因为双方都是由编译器直接实现的, 没有被声明为变量.

小结

当然, 如果你知道自己在做什么, 就是要利用 == 的这个特性, 自然是没有问题的. 其他时候用 equals() 方法即可.

爱码仕 i: 专注于 Java 开发技术的研究与知识分享!

----END----

ab7653affab982b574eb7acc55df2e04.gif

来源: http://www.bubuko.com/infodetail-3133610.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/594312
推荐阅读
相关标签
  

闽ICP备14008679号