赞
踩
如何在 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----
来源: http://www.bubuko.com/infodetail-3133610.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。