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 方法进行重写,则比较的是引用类型变量所指向的对象的地址

作者:大角牛 出处:http://www.cnblogs.com/dajiaoniu/ 本博客中未标明转载的文章归作者大角牛和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/dajiaoniu/p/10031841.html