浅析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#get
,set
和remove
首先调用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 包即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-07-07 Sass问题记录:作用域、@import导入文件和Partials语法、@mixin与@include、@extend与继承
2017-07-07 小技巧随手记:一行代码实现星级评分、同步阻塞实现sleep函数、一行代码生成随机字符串(唯一ID/Number.prototype.toString([radix])用法)、获取浏览器Cookie的值、颜色RGB转十六进制、使用数字分隔符、最快获取dom方法(ID同名变量获取dom元素)、带命名空间的事件绑定