zoukankan      html  css  js  c++  java
  • 4.3Java中"=="和equals方法

    4.3Java中"=="和equals方法

    "=="代表比较双方是否相同

    • 基本类型表示值相等

    • 引用类型表示地址相等---指同一个对象

    equals方法

    特点:

    • 由Object类中定义:public boolean equals(Object obj)方法

    • 提供定义"对象的内容相等"的逻辑---经常回去重写equals方法

    • 源码里面定义的内容是默认去看二者是否是同一个对象

    实例:

    package cn.Lucifer.oo;

    import javax.jws.soap.SOAPBinding;

    public class TestEquals {
       public static void main(String[] args) {
           Object obj;
           String str;

           //创建两个User对象
           User u1 = new User(21,"Lucifer","3123123");
           User u2 = new User(21,"Lucifer","12312123");

           System.out.println(u1 == u2); //地址不同,不同的对象
           System.out.println(u1.equals(u2));
      }
    }

    //定义一个新的类
    class User{
       int id;
       String name;
       String pwd;

       public User(int id, String name, String pwd){
           super();
           this.id = id;
           this.name = name;
           this.pwd = pwd;
      }

       //hashCode的散列码
       @Override
       public int hashCode(){
           final int prime =31;
           int result = 1;
           result = prime * result + id;
           return result;
      }

       //重写equals方法
       @Override
       public boolean equals(Object obj){
           //根据id,id相同就认为是相同对象---id于Object obj进行判断
           //因为传递的时候是Object类型,所以要做一个强制转型
           if(this == obj) //obj是形参,this是指从写的"我"这个当前对象
               return true;
           if(obj == null) //如果传进来的obj形参是空,返回false
               return false;
           if(getClass() != obj.getClass()) //如果传进来的obj类型和"我"这个对象的类型不一样,也返回false
               return false;
           User other = (User) obj; //都符合,创建个对象将形参转型为User
           if(id != other.id) //如果id不相等则返回false
               return false;
           return true;
      }
       /*
       重写以后就会返回true,因为根据id判断
        */
    }

    String的equals源码就是对字符串的挨个字符进行比较

    equals方法

    package cn.Lucifer.oo;

    import javax.jws.soap.SOAPBinding;

    public class TestEquals {
       public static void main(String[] args) {
           Object obj;
           String str;

           //创建两个User对象
           User u1 = new User(21,"Lucifer","3123123");
           User u2 = new User(21,"Lucifer","12312123");

           System.out.println(u1 == u2); //地址不同,不同的对象
           System.out.println(u1.equals(u2));

           //创建两个String对象
           String str1 = new String("Lucifer");
           String str2 = new String("Lucifer");
           System.out.println(str1 == str2); //false,因为他们不是同一个对象
           System.out.println(str1.equals(str2)); //true,因为他们内容相同,虽然对象不同

      }
    }

    //定义一个新的类
    class User{
       int id;
       String name;
       String pwd;

       public User(int id, String name, String pwd){
           super();
           this.id = id;
           this.name = name;
           this.pwd = pwd;
      }

       //hashCode的散列码
       @Override
       public int hashCode(){
           final int prime =31;
           int result = 1;
           result = prime * result + id;
           return result;
      }

       //重写equals方法
       @Override
       public boolean equals(Object obj){
           //根据id,id相同就认为是相同对象---id于Object obj进行判断
           //因为传递的时候是Object类型,所以要做一个强制转型
           if(this == obj) //obj是形参,this是指从写的"我"这个当前对象
               return true;
           if(obj == null) //如果传进来的obj形参是空,返回false
               return false;
           if(getClass() != obj.getClass()) //如果传进来的obj类型和"我"这个对象的类型不一样,也返回false
               return false;
           User other = (User) obj; //都符合,创建个对象将形参转型为User
           if(id != other.id) //如果id不相等则返回false
               return false;
           return true;
      }
       /*
       重写以后就会返回true,因为根据id判断
       概括:
       "=="是判断变量的对象是否是一个对象
       "equals"是判断变量的值是否相等
        */
    }

     

     

    It's a lonely road!!!
  • 相关阅读:
    刚听完CSDN总裁蒋涛先生的学术报告
    WinForm下屏幕截图程序的实现
    .NET4.5 Async 与 Async Targeting Pack区别
    WP8中的Tiles
    WP8中调用APP的方式
    安装Win8后必做的优化
    如何将项目从WP7升级到WP8
    ActiveWriter集成到VS.NET的NHibernate(ActiveRecord)对象可视化设计工具
    概述CSLA.NET 3.6 (Overview of CSLA .NET 3.6 for Windows and Silverlight)
    SQL Server BI Step by Step 1 准备
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14615165.html
Copyright © 2011-2022 走看看