针对“==”与equals,在不同数据类型下的作用。
(注:这个CSDN的文本编辑器,两个双等是标注其中间的内容,并添加深黄色的文字背景,所以,我就将 “==” 用汉字“双等”代替了。)
Java中,数据类型最初只有基本数据类型和一个String的引用类型。因为是引用,所以如果你的String是按照引用创建的,那么,你一般用来比较的引用(String a 就是一个完整的引用),引用存放的是对象的地址,所以,当你用 双等 比较的话,比较的是引用内存放的地址值,地址不同的话,比较出来的是false。
而一般的被使用 双等 的话,都是比较申明的变量的值。这就是比较容易搞混乱的地方。
比较的思路(流程图):
另附代码自己调试运行看,我将 双等 和equals
都分类的写了例子进行比较。
public class dome1 {
public static void main(String[] args) {
//当作引用对象
String a = new String("a");
String b = new String("a");
String s = a;
//当作基本类型
String c = "a";
String d = "a";
String e = "c";
//引用对象
System.out.println("引用对象类型(先是“==”后是“equals”):");
System.out.println(a==b);//地址不同的两个引用(即两个不同的对象)用“==”
System.out.println(a==s);//两个指向相同对象的引用用“==”
System.out.println(a.equals(b));//地址不同的两个引用(即两个不同的对象)用“equals”
System.out.println(a.equals(s));//两个指向相同对象的引用用“equals”
//基本类型
System.out.println(c==d);//基本类型值相同用“==”
System.out.println(c==e);//基本类型值不同用“==”
System.out.println(c.equals(d));//基本类型值相同用“equals”
System.out.println(c.equals(e));//基本类型值不同用“equals”
/*
* 对于 “==” 和 “equals”,要分为基本类型和引用类型
* 基本类型:
* 对于equals方法,其实只有String的基本类型才能调用,其它的如int、double、float都不行。
* 对于“==”,直接比较值是否相等。
* 引用类型:
* 直接说的是String类型的引用。对于“==”,直接比较引用存放的地址,相同为true,不同为false,并不关心值如何(当然,如果地址相同的话,那值也是一样的了)。
* 对于“equals”,直接比较值是否相同,并不关心值的情况。
*
* */
}
}
结果: