这里为什么ss.get(0)==ss.get(1)为false呢?
不明白
求大佬们解答,蟹蟹!!
这里为什么ss.get(0)==ss.get(1)为false呢?
不明白
求大佬们解答,蟹蟹!!
几个知识点:
1、==比较的是地址,存放的地址值不相同就是false。
2、Integer是int的封装类,是对象,==对于对象是比较 地址 ,而int是基本类型,==就是比较值的大小
3、ss.add(150) 这里其实是进行了自动封箱,即将int类型的150转成Integer(因为list<Integer>规定了里面的类型是Integer)
4、int a = ss.get(0) 这里就反过来进行自动拆箱,将Integer转成int,所以下面a==b返回的是true(值相等)
5、补充一点:对于Integer,当Int值范围在-128—127之间时,会通过一个IntegerCache缓存来创建Integer对象;当Int值不在该范围时,直接调用new Integer()来创建对象。
意思是:如果上面的ss.add(150) 换成ss.add(1),那下面的ss.get(0)==ss.get(1)就是true,因为比较的是同一个缓存