相信大家经常遇见字符串用equlas和==比较,判读输出为真假。
其实只要你搞懂了,这种题so easy!!!
我们先来看一看一个例子
public class day01_6 { public static void main(String[] args) { String str1 = new String("111"); String str2 = "111"; System.out.println(str1==str2); System.out.println(str1.equals(str2)); } }
相信都知道答案吧,那就是false和true。为什么呢
首先==是用来比较值的。而str1和str2的值又是什么呢,那就是地址值
很明显str1指向堆,str2指向方法区,地址不同,所以返回false
那么equals比较的是什么呢,我们看看Object里面是怎么定义的吧
public boolean equals(Object obj) { return (this == obj); }
阿偶,他们比较的也是地址值。
所以说,在不重写类的equlas的情况下,他们比较的都是地址值。
而String类重写了equlas方法,让其比较的是字符串的内容,很明显,两个字符串都是111,所以相等。
结论就是:
1、使用==比较时,如果是基本数据类型,则比较他们的值的大小,而对于引用类型,他们比较的是它们的地址值
2、使用equals比较时,只能比较引用类型,如果类没有重写equals方法,那么比较的是他们的地址值,若重写了equals方法,则根据equals方法定义的去比较。