equals 和 ==

  1、首先看一下代码:

  

 1         String s1 = new String("abc");
 2         String s2 = new String("abc");
 3         System.out.println(s1 == s2);
 4         System.out.println(s1.equals(s2));
 5         
 6         System.out.println("------------------------------");
 7         
 8         Person p1 =  new Person();
 9         Person p2 = new Person();
10         System.out.println(p1 ==  p2);
11         System.out.println(p1.equals(p2));

  结果分析: 

    1、false 
    2、true
    -----------------------------
    3、false
    4、false    

  第1个是false的原因是因为使用的是==比较的引用类型

  第2个结果是true的原因是因为String的源码中进行了equals的重写,源码如下:

 1     public boolean equals(Object anObject) {
 2         if (this == anObject) {
 3             return true;
 4         }
 5         if (anObject instanceof String) {
 6             String anotherString = (String)anObject;
 7             int n = value.length;
 8             if (n == anotherString.value.length) {
 9                 char v1[] = value;
10                 char v2[] = anotherString.value;
11                 int i = 0;
12                 while (n-- != 0) {
13                     if (v1[i] != v2[i])
14                         return false;
15                     i++;
16                 }
17                 return true;
18             }
19         }
20         return false;
21     }

  3、第3个结果为false的原因是因为使用==判断的引用类型的对象

  4、第4个为false的原因是因为Person类中没有重写equals方法,直接继承的父类Object的equals,即就是==的方法源码如下:

     1 public boolean equals(Object obj) { return (this == obj); } 

  1 、== 既可以比较基本类型又可以比较引用类型
    1.1 基本类型 比较的是值是否相等
    1.2 引用类型 比较的是内存地址是否相等 使用 == 比较引用类型的时候,永远是false
  2 、equals 是比较什么?
    2.1 equals是Object里面的方法
    2.2 只能比较引用类型
    2.3 equals到底比较什么?答案是不一定,需要看你是如何重写的
      2.3.1 没有重写保持出厂默认,equals就是 ==
      2.3.2 具体情况具体分析,看重写的规则

    

posted @ 2019-09-11 16:29  houstao  阅读(117)  评论(0编辑  收藏  举报