java 中Integer 与int 的问题

图片说明

直接用int 而不用Integer就会下标越界,这是为啥 啊?

你的allowedcities是arraylist,据我所知是不能存储int这类基本数据类型的,只能用integer来存储,string虽然是看起来像int,
但是他也是创建了一个对象的,是不是这个原因,你可以上试试

你的allowedCities是ArrayList吧,第一删除的是对应的对象,你的allowedCities一共有36个大小,但是你的某城市代码为39,第一种删除是直接删除Integer(39)这个对象,
而第二种删除是按照下标删除删除allowedCities[39],这样肯定会越界

图片说明

ArrayList这个类的remove方法有两个,一个是int类型的,一个是Obeject的类型的。

如果传入的是Object,则是删除这个对象。

如果传入的是int,则是删除下标为int的位置的那个对象。

看看那个源码注释就制动啊了。

你使用Integer当作入参,删除的是这个对象。

你使用int当作参数,则是删除下标是39的那个位置的对象。所以越界了。

整个array是个对象 一边循环一边remove会报错的 应该和类型无关