首页 > 代码库 > ==和equals的比较方式

==和equals的比较方式

  关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。——摘自《Java编程思想》

  多读几遍之后你会发现——这不就是句废话么233333.(开个玩笑不要打我)

     先说 == (等于关系操作符)

当你在使用这个关系操作符的时候要注意等号的两边分别是什么

  1.同种基本数据类型的比较:

这个相信大家都知道,就是值的比较,相等就true,不等就false

  2.同种类型对象与对象之间比较

  Integer a =new Integer(100);
  Integer b =new Integer(100);
  System.out.println(a==b);

输出结果自然是false,这里比较的是a,b在内存中的地址,而这两个对象的地址自然是不同的

说到这里忍不住提一笔(int 这个数据类型有个小特例),看下面代码

    Integer a =200;
    Integer b =200;
   Integer c =100;
Integer d =100; System.out.println(a
==b);
   System.out.println(c==d);

 

这个输出的是false  true  原因嘛看一下源码就了解了

public static Integer valueOf(int i) {           //当你输入的int值不在他规定的区间里面时,他就重新new一个对象
        assert IntegerCache.high >= 127;      
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

 

  3.引用数据类型和基本数据类型比较的时候它会将引用类型拆箱操作,进行值的比较。

int a =200;
Integer b =new Integer(200);
System.out.println(a==b);

 

 结果是true

 

 

下介绍equals

关于equals(),其实想一探究竟你结合方法的源码来看是最直接准确的;
下面重点介绍Integer型和String型
 1 /**
 2      * 这个是jdk1.7 Integer 里面重写的equals方法
 3      * 
 4      */
 5 
 6     public boolean equals(Object paramObject) {    
 7             if (paramObject instanceof Integer)  // 如果你传的参数不是integer,直接返回false,
 8                                                         //当然如果是int型它会自动装箱成integer
 9                return (this.value =http://www.mamicode.com/= ((Integer) paramObject).intValue());
10             return false;             //如果是integer型的,那就很好,直接都转成int型用==比较数值返回相应的true/false
11         }
12     /*
13      * 这个是jdk1.7 String里面equals重写方法
14      */
15     
16     public boolean equals(Object paramObject) {
17         if (this == paramObject)//如果你传的是同一个对象,这里比较的是对象
18             return true;        //既然都是同一个了,自然是true;
19         if (paramObject instanceof String) {//这里就是与上面一样判断是不是同一类型,不是就返回false;
20             String str = (String) paramObject;   //将传入参数的值给Str,将str分解成单个的char型数据进行单个比较,全相等就是true
21             int i = this.value.length;
22             if (i == str.value.length) {
23                 char[] arrayOfChar1 = this.value;
24                 char[] arrayOfChar2 = str.value;
25                 for (int j = 0; i-- != 0; ++j)
26                     if (arrayOfChar1[j] != arrayOfChar2[j])
27                         return false;
28                 return true;
29             }
30         }
31         return false;
32     }

 结论就是值的比较,当然前提是你比较的是同种类型的数据(仅这里把int和integer这样的看做一种);

 

 

转自——这么烂肯定自己写的

 

==和equals的比较方式