• ==和equals


    java中测试两个变量相等有两种方法:==和equals

    1.当使用==时,如果  两个变量是基本数据类型变量,且都是数值类型(不严格要求数据类型相同),则只需要两者的变量的值相等,就返回true

                          如果  是两个引用类型的变量,他们必须只想指向一个对象时,==判断才会返回true(==不可用于比较类型上没有父子关系的两个变量)

    2.当使用equals时,equals是用来比较引用类型值相等的,对于8大基本数据类型,是有重写Objdect中的equals方法

       在Object中equals方法和==一样

    Object中equals方法
    public boolean equals(Object obj) { return (this == obj); }

     在8大基本类型中,重写了equals方法

    Integer重写Object的equals方法
    public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }

     所以对于8大基本类型对应的包装类,我们可以放心的用==来比较对象相等,用equals来比较对象的值相等。8大基本类型我们直接用==比较值是否相等

             int i=8;
             int j=8;
             System.out.println(i==j);//基本数据类型比较  ==         
             Integer a=new Integer(8);
             Integer b=new Integer(8);
             System.out.println("a=b:"+(a==b)); //基本类型对应的包装类比较  ==(是否指向同一个对象)
    System.out.println("a.equal:"+a.equals(b));//equals 对象的值时候相等

     我们知道:所有的类都继承自Object。即使我们自己写的类也是继承自Object,自己写的类在调用equals方法时,实际是调用Object类的equals方法,

    但是这个方法和“==”是一样的,都是用来判断对象是否一致,这时我们如何判断对象对应的值是一致呢?

    答案是:重写父类的equals方法(这里我们指自定义类的父类Object)

    class EqualsTest {
    	public int k;
    
    	public EqualsTest(int k) {
    		this.k = k;
    	}
    	public boolean equals(EqualsTest test) {
    	  if(k==test.k)
    		  return true;
    	  else
    		  return false;
    	}
    }
    
    
    public class Test {
    	/**
    	 * 自定義類,重寫equals方法測試
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TeODO Auto-generated method stu
           EqualsTest testA=new EqualsTest(9);
           EqualsTest testB=new EqualsTest(9);
           System.out.println(testA==testB);//false
    System.out.println(testA.equals(testB));//true
    } }

     总结:

         1.基本数据类型用 == 比较两个变量的value值是否相等

         2.基本类型对应的包装类,用 ==比较两个对象是否相等,用equals比较两个对象的value是否相等

           对于自定义类型,用 == 比较两个对象是否相等(同一个对象),通过重的equals方法来实现value(或者其他)是否一致

         补充:八大基本数据类型及其包装类

                 基本数据类型      对应包装类

                      int      Integer

                      short              Short

                      long       Long

                      String     String

           boolean    Boolean

           char     Character

                      float     Float

                      double    Double

  • 相关阅读:
    微软职位内部推荐-Senior Development Lead
    微软职位内部推荐-Senior Program Manager
    微软职位内部推荐-Senior PM
    微软职位内部推荐-Principal Software Eng Mgr
    微软职位内部推荐-Senior Software Engineer
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL慢日志查询
    spark运行模式
    scala+hadoop+spark环境搭建
    MySQL Sleep进程
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3472602.html
Copyright © 2020-2023  润新知