你好,游客 登录 注册 搜索
背景:
阅读新闻

黑马程序员_常见java问题小计 - wangjinyu501的专栏

[日期:2013-03-16] 来源:  作者: [字体: ]

1、equals方法的小问题           

public class Student {
       
        public static void main(String[] args) 
        {
        Scanner sc = new Scanner(System.in);            
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
            if (username.equals("admin") && password.equals("admin")) {
                        System.out.println("true");}
            else
            {
                    System.out.println("false");
            }      
}
}

  为什么上面的equals方法没有复写但是正确,而下面的代码切要复写了equals方法了呢,这个equals方法什么时候复写呢?

public class Student {

      private String name;
      private int age;

      public Student(String name,int age)
      {

      this.name=name;

      this.age=age;

      }

      public static void main(String[] args)

      {

      Student st1 = new Student("zhang",20);

      Student st2 = new Student("zhang",20);

      if(st1.equals(st2))

                      System.out.print("相等");

      else

                    System.out.print("不相等");

    }

     public boolean equals(Object obj){
           
              if(obj==null) return false;

              else

              {

               if(obj instanceof Student){

                Student c=(Student)obj;//强制转换

               if(c.name==this.name && c.age==this.age ){

                return true;

               }

               }

              }

              return false;           

             }
}

  对于你的疑问,需要先从Object这个类说起。Obeject类是所有没有显式继承其他类的父类。也就是说类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。这个根类中有equals方法。
一、任何继承Obeject类的子类,要么直接使用Object类中的方法,直接使用的话,就是直接使用Object类中的equas的功能,这个功能就是指示其他某个对象是否与此对象“相等”,她比较的是地址值。要么覆写其中的方法,重写equals方法,定义自己的比较方式。
二、 String 类代表字符串。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。(这句话来自String类的API文档)。对于String类中的equals方法,你可以这样理解,她 比较的是字符串内容,只要字符串的内容相同就返回true;例如:String s1="abc";String s2="abc"   String s3="abcd",s1.equals(s2)结果是true  ,而s1.equals(s3)是false;
三,对于你第一个示例没有重写equals方法得到了的结果,你可以用上述第二点解释。 对于下面的示例,你是覆写了Object类中的equals方法,通过比较姓名和年龄两个是否相同返回结果建立自己Student类的自己的比较方法。

  String类在底层已经复写了Object这个上帝类的equals方法,String类的equals方法判断的依据是被判断的两个字符串常量字符序列是否相同,若是就返回true;而其它的大部分类或者程序员自定义的类,都直接调用的是Object类的equals方法,这时的equals方法判断的依据仅仅是两个对象的引用是否都指向同一个对象。如果是jdk提供的类,进去看看它有没有覆写equals,如果它没有覆写而你又要使用则需自己覆写。

                                                                                                                                                                                                                                              





收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻