软件测试技术 homework1 印象最深的错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试技术 homework1 印象最深的错误相关的知识,希望对你有一定的参考价值。
我印象最深的一次错误是关于==与equals的,是在写数据库的时候遇到的。
比如:
String a = "123";
String b = new String("123");
System.out.println(b.equals(a));
System.out.println(b == a);
结果是前者是true,后者是false。
后来,经过查阅资料,我发现:
==比较的是引用变量的值,也就是比较的对象的内存地址。当两个引用变量指向同一个对象时返回true,反之,返回false。
而在Object里,equals方法如下声明:
public boolean equals(Object obj) {
return (this == obj);
}
可以看到,在Object里,equals就是通过==来实现,所以Object下的equals比较也是引用变量的值。
但是在string里,equals方法如下声明:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
可以看到,在Sring里,其重写了equals方法。先判断是是不是同一个对象,在判断两个对象的值是否相同,相同返回true。
以上是关于软件测试技术 homework1 印象最深的错误的主要内容,如果未能解决你的问题,请参考以下文章