软件测试技术 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。

原文地址:https://www.cnblogs.com/liyuze/p/5246843.html