首页 > 其他 > 详细

软件测试技术 homework1 印象最深的错误

时间:2016-03-06 12:44:30      阅读:173      评论:0      收藏:0      [点我收藏+]

我印象最深的一次错误是关于==与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 印象最深的错误

原文:http://www.cnblogs.com/liyuze/p/5246843.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!