淺析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 包即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM