==和equals的区别
1.首先,我们来说说==这个比较符,当比较的是基本数据类型时,比较的是值,当比较的是对象时,比较的是引用。
下面让我们举个例子:(1)如图,现在我们比较的是整数类型,整数类型属于八大基本数据类型之一,所以比较的是值,若值相等,则为true,否则为false。

(2)当比较的是对象时,比较的是引用。在这里,我们以String对象为例,在讲对象比较时,首先我们要知道常量池,栈,堆。
当定义String s1="123"时,s1是放在栈中的,字符串“123“”放在常量池,然后s1指向常量池的“123”字符串,所以
String s1 = "abc"是等于String s2 = "ab"+"c",因为都指向常量池的“abc”字符串。当String s3 = "a",String s4 = "b",String s5 = "c",String s6 = s3+s4+s5,此时s6指向的是堆里的地址,因为s3+s4+s5是在堆里创建的,所以s1==s6的结果为false.同理当String s7 = s3+"ab"时,s1==s7为false,因为一个指向常量池,一个指向堆。测试结果如下图:

2.好了,终于到了讲equals方法了,首先equals方法与==的区别是,==既能比较基本数据类型,也能比较对象。但equals方法只能比较对象,当equals比较对象时,比较的是对象的地址即引用。但是凡是有例外,对于String,Integer等包装类,则不关心对象引用地址是否一样,只关心里面的内容是否一样,如果一样则返回true.因为这些类重写了equals方法。

浙公网安备 33010602011771号