之前在逛博客时发现有人发现这个问题虽然给出了解决方案但问题的出现原因并不了解,所以进行说明
如程序所示:
ArrayList list = new ArrayList();add(1);
add(4);
add(3);
如果想删除4那个数据,直接list.remove(4);运行程序会下标越界,
原因是因为remove方法是一个被重载的方法,根据传入参数有
int型(既下标索引)和Object(对象)型的两种方法,首先要知道
直接输入一个整数如4,在没有声明变量类型的时候程序默认是int型,
即使你在编译器里选用的是Object(对象)方法,程序运行时也是根据
重载的机制以传入参数的类型而调用方法,因此list.remove(4),4实际上是int型
调用的是根据数组下标删除数据的方法,而非根据对象删除的方法,所以我们需要
这样写:list.remove((Integer)4);这时4从int型被转为Integer型,
程序运行时根据对象类型调用remove(Object)方法;
欢迎大家补充说明