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

  • 相关阅读:
    spoj DQUERY
    省选模拟赛 爬山法
    bzoj1874 [BeiJing2009 WinterCamp]取石子游戏
    bzoj1013 [JSOI2008]球形空间产生器sphere
    省选模拟赛 让苍天知道我不认输(40分)
    省选模拟赛 厌世者打击(60分)
    省选模拟赛 至危警告
    bzoj4449 [Neerc2015]Distance on Triangulation
    省选模拟赛 cti
    数组、ArrayList、List、LinkedList的区别
  • 原文地址:https://www.cnblogs.com/liyuze/p/5246843.html
Copyright © 2020-2023  润新知