引言
我们知道,通过对数据类型进行划分可分为基本数据类型和引用数据类型。对于基本数据类型来说,== 判断的是他们的值是否相等。那么,对于引用数据类型来说,它们又是通过什么来进行比较的?
正文
代码:
public static void main(String[] args) {
String t1 = "10";
String t2 = "10";
String t3 = new String("10");
System.out.println(t1 == t2);
System.out.println(t1 == t3);
System.out.println(t1.equals(t2));
}
输出:
解析:
我们知道,对于字符串存储值来说,首先搜索一遍字符串常量池,如果找到和待赋的值一样,就返回该地址。如果没有找到,就在字符串常量池为其开辟空间,并返回该地址。所以,== 比较的是他们在内存中的存放地址是否相同。Object类中的equals也是如此。
为什么要提 Object 类呢?其他类不行吗?
请看源码:
Object 类:
String 类:
我们可以看出,String 类重写了 Object 类的 equals 方法。对于 String 的 equals 方法来说:
1、首先看这两个字符串的地址是否相同,如果相同返回true.
2、如果字符串地址不相同,那么首先会判断要比较的是否属于String类型,如果是,然后在比较里边的内容是否相同。
总结
1、对于基本数据类型,==判断的是值是否相同
2、对于引用数据类型,==判断的是地址是否相同
3、equals()方法不支持基本数据类型的调用
4、对于Objec类中的equals()方法,判断的是地址是否相
5、对于String,Integer,Date在这些类来说,重写的equals(),首先判断的是地址是否相同,如果不相同则再进行值的判断