当我们需要将两个值进行比较时,通常都会使用到“”和equals。那么它们两个有什么区别呢。
首先说说“”,它是我们目前比较值时常用的比较符。它对应两种不同类型的值比较会有两种结果。当值是基本类型时,它比较的是值。当比较的是引用类型时,它比较的是引用是否相同。
如下代码所示
而Equals比较的是值。所以当用equals比较a和b,a和c时,返回的都是true。
但其实从本质上来讲,equals是等于“==”的。我们可以看一下它的源码
那既然equals的本质是等于“==”的,为什么上面的a会等于c呢。
我们可以点进这个equals看一下
原来string的类里面对object的equals进行了重写,把引用比较改为了值比较。
总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。