简而言之,"=="测试引用是否相同,而equals()测试字符串的值是否相同。除非想要检查两个字符串是否是同一个对象,否则你应该使用equals()
真正意义上 equals和==是一样的,即 a==b时,a.equals(b)=true;
但是很多人会觉得equals和==不一样是因为string类型经常用equals,别的类型用==之类的,会下意识的把它们区分开来。
其实你去看一看string下equals的源码就知道了,equals其实是先比较==,如果不相等,再比较两个对象的values是否相等,
这其实算是一种对equals的重写。源码就不贴出来了,自己去看看
所以最主要的是要看你业务逻辑上是比较他们的值相等才算是相等,还是必须是同一个引用才算是相等。
ps:
所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
说明:对于 Integer var=?在-128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache
产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之
外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方
法进行判断。
双等号 比较的是地址是否相同,equals比较的是内容是否相同。所以一般比较两个字符串是否相同,用的是equals,用双等号会显示false
建议你可以先把值类型和引用类型搞清楚,这个也就自然明白了