使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告
2010-01-11 00:00:00 来源:WEB开发网 int index = 2;
String[] names = new String[] { "developer", "Works" };
System.out.println( names[index] );
index 为 2,而数组只有两个元素,最后一个元素的下标索引是 1,所以导致数组访问越界。注意,如果 index 为负数,仍然是数组访问越界。
清单 8. 越界访问 Vector
Vector<String> vec = new Vector<String>();
for ( int i = 0; i <= vec.size(); i ++ ) {
System.out.println( vec.get(i) );
}
Vector 和 ArrayList 的起始索引是 0,所以用其数组大小作为索引会导致数组访问越界,其数组最后一个元素的索引应该是“数组大小 -1 ”。
清单 9. 越界访问 String 数组元素 2
int a = 0;
String[] names = null;
StringBuffer buf = new StringBuffer();
if ( a > 0 ) {
names = new String[] { "developer", "Works" };
} else {
names = new String[] { "developerWorks" };
}
buf.append( names[0] ).append( names[1] );
程序员调用 append 时以为数组 names 中有两个元素,其实只有一个。
清单 10. 越界访问 ArrayList
ArrayList<String> arrList = new ArrayList<String>();
int len = 5;
for( int i = 0; i < len; i++ ) {
arrList.add( String.valueOf(i) );
}
arrList.remove( len - 1 );
System.out.println(arrList.get( len - 1 ));
更多精彩
赞助商链接