java中 == 与equals 的区别

==与equals 的区别

简介

  == 可以比较基本数据类型,也可以比较引用数据类型

    比较基本数据类型,比较的是

    比较引用数据类型,比较的是地址值

  equals 只能比较引用数据类型,比较的是引用数据类型的内容

 

说明

  == 相当于实际生活中的等号(=),对于基本数据类型的变量来说,就是直接判断两个值是否相等

  在java中的基本数据类型   四类八种

    1、浮点型 :float(浮点型), double (双精度性)

    2、整型 : byte(字节型), short (短整型),  int(整型),  long(长整型)

    3、字符型 :char(字符型)

    4、布尔型 : boolean(布尔型)

	// 定义两个变量
        int a = 20;
        int b = 20;    
        // 使用== 进行比较两个值是否相等,打印结果 :true
        System.out.println(a==b); 

  对于这八种基本数据类型的变量,可以直接使用 == 来比较变量的值

  而对于非基本数据类型的变量,在一些数据中称为 引用类型,比如String 

  对于引用类型存储变量,存储的并不是 “值” 本身,而是该值在内存中的地址。所以引用类型使用 == 进行比较的时候,比较的是变量值的地址值,并非 “值” 本身

 

 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     }
String 源码,重写equals

  equals 方法是Object中的方法,因此对于所有继承Object 的类,都会有该方法。

  从String 源码看出,String 重写了equals 方法,比较的是执行对象的内容

  若没有对equals 方法进行重写,则比较的是引用类型变量所指向的对象的地址

 

posted on 2018-11-28 15:08  大角牛  阅读(166)  评论(0编辑  收藏  举报

导航