在一次实验的test阶段,测试文件总是不通过,最后发现我是犯了等价性方面的错误:
在判断两个字符串是否相等时错误的使用==,将其改为equals()方法解决了问题。
后来在经课上听讲与课后调查了解到:
==是在判断两个对象是否指向内存里的同一段空间。
equals是将此字符串与指定的对象进行比较。当且仅当参数不为NULL并且是表示与此
对象相同的字符序列的字符串对象时,结果才为true。
就这个问题简化验证:将字符串s1与s2,利用==与equals()分别判断
String s1="Hui";
String s2=new String(s1);
if(s1==s2) {
System.out.println("==:T");
}
else {
System.out.println("==:F");
}
if(s1.equals(s2)) {
System.out.println("equals:T");
}
else {
System.out.println("equals:F");
}
结果如下:可以看出==判断为false,利用equals()判断为true。
这里让我想起了一道以前的课堂的一道题可以加深对==的理解:
答案为Flase;True
a为创建的Integer对象,b是自动装箱产生的Integer对象,其地址不同,故第一个为false。
c为int类型,int与Integer比较时,Integer会进行拆箱,相当于两个int进行比较,故第二个为true。
通过以上测试可以看出:在判断相等的大部分情况下,我们在代码中的本意是equals(),
而不是==,这点不难理解,故在编写代码时一定要注意。