zoukankan      html  css  js  c++  java
  • 软件测试技术 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。

  • 相关阅读:
    restart xinetd
    Hello World——Linux汇编
    C++箴言:理解inline化的介入和排除
    网上找来的不错的Debian sources.list
    C/C++中static变量和static函数的用法
    Inline内联函数的总结贴
    C++箴言:理解inline化的介入和排除
    Hello World——Linux汇编
    网上找来的不错的Debian sources.list
    C/C++中static变量和static函数的用法
  • 原文地址:https://www.cnblogs.com/liyuze/p/5246843.html
Copyright © 2011-2022 走看看