zoukankan      html  css  js  c++  java
  • 浅析Java里的ArrayList的rangeCheck报错、String() in String cannot be applied to (byte[])

    一、问题背景

      报错信息:java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
          at java.util.ArrayList.RangeCheck(ArrayList.java:547)
          at java.util.ArrayList.get(ArrayList.java:322)
          at AddressBookPrimer.main(AddressBookPrimer.java:21)

      如果articles返回的不是 null,而是一个空数组的话,那么这个代码就报错了,所以需要修改下:数组不能只判空,还需要判断size() >0

    二、问题分析

      ArrayList#getsetremove首先调用rangeCheck方法。此方法不检查索引是否为负数,它只检查索引是否大于或等于数组的长度。

      Javadoc解释了原因:如果索引是负数,则数组访问会抛出ArrayIndexOutOfBoundsException

    private void rangeCheck(int index) { 
        if (index >= size) 
         throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); 
    } 
    public E get(int index) { 
        rangeCheck(index); 
        return elementData(index); 
    } 

      在运行时检查所有数组访问,尝试使用小于零或大于或等于 数组长度的索引,会导致抛出ArrayIndexOutOfBoundsException。

      如果数组是个空数组,size 为 0 ,而你又去取第一个元素 get(0),元素都没有,所以就会报错。

    三、报错:String() in String cannot be applied to  (byte[])

      这个报红,并显示错误:String() in String cannot be applied to  (byte[])

    1、问题原因:引入错了String的包,查看import中导入的是

    import com.sun.org.apache.xpath.internal.operations.String;

    2、解决方法:删掉,改用 java.lang.string 包即可

  • 相关阅读:
    AC自动机+全概率+记忆化DP UVA 11468 Substring
    java POI技术之导出数据优化(15万条数据1分多钟)
    验证IP端与数据库Ip端是否重复!!!
    JAVA中IP和整数相互转化(含有掩码的计算)
    Nginx搭建反向代理服务器过程详解
    session原理及实现共享
    Linux部署多个tomcat
    linux下怎么修改mysql的字符集编码
    linux yum 安装mysql
    VM虚拟机下的Linux不能上网
  • 原文地址:https://www.cnblogs.com/goloving/p/14983116.html
Copyright © 2011-2022 走看看