Java中的==和equals的区别

“==”比较

  1. 基本类型之间互相比较:以值进行比较,进行比较的两个操作数都是数值类型,即使他们的数据类型不相同,只要他们的值相等,也都将返回true
    即就是
    Integer a = 1;
    Integer b = 2;
    Long g = 3L;
    System.out.println(g == (a+b));还会输出true

  如果超出数据范围,就会返回false,范围为-128~127之间,例如:
  Integer e = 200;
  Integer f = 200;
  System.out.println(e == f);会返回false

  1. 一边是基本类型,一边是包装类型

    1. 同类型的进行比较,如Integer 与int,Long与long进行==比较时,会自动拆箱比较值
    2. 不同类型之间进行比较,则会自动拆箱,且会进行自动向上转型再比较值(低级向高级是隐式类型转换如:byte<short<int<long<float<double,高级向低级必须强制类型转换)
  2. 两边都是包装类型则直接比较引用地址,但是要注意Integer除外。例如
      Integer c = 3;
      Integer d = 3;
      System.out.println(c == d);会返回true
     但是例如
      Double d1=12.0;
      Double d2=12.0;
       System.out.println(d1= =d2);会返回false

equals”比较

在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相同),比如:String,Integer,Date 等类中,所以他们不再是比较类在堆中的地址了、

Integer类型的equals
equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer同类型的对象,如果是则判断值是否相同,值相同则返回true,值不同则返回false,如果obj不是Integer类的对象,则返回false。
需要注意的是:当参数是基本类型int时,编译器会给int自动装箱成Integer类,然后再进行比较。

  1. 基本类型(值类型)之间无法使用equals比较。
  2. equals参数为值类型,则参数会进行自动装箱为包装类型,之后请参见第3点。
  3. equals参数为包装类型,则先比较是否为同类型,非同类型直接返回false,同类型再比较值。
    例如:
    Integer a = 1;
    Integer b = 2;
    Integer c = 3;
    Long g = 3L;
    System.out.println(c.equals(a+b));//返回true,类型相同,值相同
    System.out.println(g.equals(a+b));//返回false,类型不同,直接返回false

总结

" == "在基本数据类型比较的是:值内容, 引用类型时比较的是:地址
equals 重写比较的是:值内容 , equals不重写比较的是:地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值