这里涉及到invoke在JDK1.4和JDK1.5中定义的方法了。
在1.4中,public Object invoke(Object obj,Object[] args),第二个参数使用的是数组
在1.5中,public Object invoke(Object obj,Object...args),第二个参数是可变参数。
当你使用的是new Object[]{1}时,会自动调用1.4中的方法,此时会把数组中的元素当作函数的参数,也就是把1传递给了charAt(),成立。
当你使用的是new int[]{1}时,也会自动调用1.4中的方法,此时相当于Object[] args =int[].这句话是不成立的,所以就会返回调用1.5的方法。
此时就是把int[]的地址当作参数传递给了charAt(),所以会出错。 |