Map取值后比较的问题

Yunxiao 2020年08月17日 328次浏览

今天刷力扣的滑动窗口题时,最后总是超长的数据过不了。
问题出在这样一行代码

if(map1.get(key1)==map2.get(key2)){
	....
}

原因是map取出来的是Integer类型,Integer第二次创建的时候不会使用new关键字,而是使用已经缓存的对象。 如果数值在-128~127位之间会有缓存,那么两个对象地址相同,此时使用 == 比较结果正确, 如果数值超出范围,就会创建新的对象,分配的地址不同,此时再用 == 比较就会出错。

可以用equals()或者compareTo()来比较引用类型。

再提一句: “==”: 对于基本类型来说比较的是值;对于引用类型比较的是地址。