zoukankan      html  css  js  c++  java
  • 学习Java,容易被你忽略的小细节(3)

      在《学习Java,容易被你忽略的小细节(2)》中我们已经深入讨论过String类中equals()方法的使用,在本文中我们将进一步讨论equals()方法在其他境况下的使用方法。

      首先,我们先提供一个网址http://docs.oracle.com/javase/7/docs/api/,长期从事Java程序设计的程序员都知道这个网址。没错这里展示的就是Oracle公司提供的Java API的技术文档,以后大家如果在Java程序设计时遇到什么问题基本都可以在这里找到答案。

      大家都知道Java中根类是Object,在Java中每一个类都来源与java.lang.Object类。所以熟悉Object类提供的方法是非常重要的,这样才能在自己定义的类中使用它们。本文中我们仅讨论Object中equals()方法。

      Object类中默认实现equals()方法的语句如下:

    public boolean equals(Object o)
    {
        return (this == o)  
    }

      显然,在Object类中使用equals()方法等价于使用==运算符,难道Java语言设计者闲的没事做定义了一个没用的方法吗?很明显这是不可能的,于是我们想测试一下在自定义类中equals()方法是否也等价于==运算符呢?

      测试代码:

    public class Student{
        String name;
        int age;
        String sex;
        Student(String n,int a,String s){
            name = n;
            age = a;
            sex = s;
        }
        public static void main(String[] args){
            Student s1 = new Student("zhang",20,"male");
            Student s2 = new Student("zhang",20,"male");
            if(s1.equals(s2))
                System.out.println("s1.equals(s2) 结果为true");
            else
                System.out.println("s1.equals(s2) 结果为false");
        }
    }

      显然s1和s2内容相同,但是并非同一对象。下面我们看一下运行结果: 

      从运行结果上我们可以看出的确在自定义类中equals()方法也等价于==运算符,这是怎么一回事呢?

      但是我们来仔细回想一下String类中equals()方法调用的结果,很明显与我们上面做的测试不符。很多聪明的读者大概猜到是String类对equals()方法进行了覆盖。其实,在很多情况下程序员都会在自定义的类中覆盖equals()方法,使其变成用来判断对象内容是否相等的方法。这也是学习Java程序设计应该熟练掌握的技巧之一。

      下面提供Student类中equals()方法的具体实现。

        public boolean equals(Object o)
        {
            if(o instanceof Student)  //判断o是否是Student类
            {
                Student s = (Student)o;  //强制类型转换
                return this.name.equals(s.name) &&
                    this.age == s.age &&
                    this.sex.equals(s.sex);
            }
            else
            {
                return false;
            }
        }

      测试结果:

      经过上面覆盖我们自定义的类中的equals()方法就可以实现类似String类中equals()方法的功能,用来判断对象内容是否相同了。

      下面再介绍一个有关equals()方法使用常见的集中错误:  

    //No1
    String s1;
    String s2 = new String();
    s1.equals(s2);        //这时s1为null,程序编译时抛出异常NullPointerException

      

      上面就是学习Java,容易被你忽略的小细节(3)。

      欢迎继续关注本博更多新鲜动向,博主QQ:2584451009,有什么建议和忠告欢迎评论或留言。

  • 相关阅读:
    求集合的子集总结及案例
    静态资源(JS/CSS)存储在localStorage
    js 数组&字符串 去重
    跨域iframe高度计算
    Xshell5连接虚拟机出现连Could not connect to '192.168.47.128' (port 22): Connection failed,解决办法
    sql server中常用方法函数
    sql中union和union all的用法
    python(1) -文件操作
    python(1)
    python(1)
  • 原文地址:https://www.cnblogs.com/FlightButterfly/p/3357774.html
Copyright © 2011-2022 走看看