java中字符串相等判断
字符串的判断有2种:
1、判断地址是否相等 用:==
2、判断值是否相等 用:equals方法
Object类作为所有类的超类,而Object类的equals方法是直接比较地址的,源码如下:
public boolean equals(Object obj) { return this == obj; }
所以,在String类中的equals方法,是重写了Object类的equals方法的,String类的equals方法源码如下:
public boolean equals(Object anObject){ if(this==anObject){ //比较地址,如果地址相等,直接返回true return true; } if(anObject instanceof String){ //如果地址不相等,那就比较类型,如果类型不相等,直接返回false String anotherString =(String)anObject; //由于是String类的比较,所以要把对象强转为String类 int n=value.length; //记录当前对象的字符长度 if(n==anotherString.value.length){ //判断当前对象的字符串长度和传入的字符串长度是否一样,不一样,直接返回false,如果一样,接着往下比较 char v1[]=value; char v2[]=anotherString .value; int i=0; while(n-- !=0){ //将2个字符数组的循环对比 if(v1[i] !=v2[i]) //将字符数组的字符进行对比 return false; //如果出现一个字符不同,马上返回false i++ } return true; } } return false; }
String类的equals比较内容相同思路如下:
1、先判断地址是否相等,相等返回true
2、比较类型是否一样,不一样,返回false
3、将传入的对象强转为String,比较长度,长度不相等,返回false
4、长度相等,循环比较字符数组的元素,当有一元素比较内容不相同,马上返回false
5、2个字符数组循环比较所有元素,没有内容不相同的元素,返回true
测试代码如下:
public class TestString { public static void main(String[] args) { String str="abc"; String str2=new String("abc"); System.out.println("两个对象的内存地址是否相等:"+(str==str2));//false /**比较对应位置上的字符是否相等,如果所有的对象位置上的字符均相等,true,否则返回false*/ System.out.println("两个对象的内容是否相等:"+(str.equals(str2))); //以下结果为 false /**因为Person对象 instanceof String 的结果为false ,直接返回false*/ System.out.println("String对象与Person对象的内容是否相等:"+(str.equals(new Person()))); } } class Person{ }
水平有限,还请多多指教!
内容