();
list.add("abc");
list.add("bc");
list.add("bc");
list.add("abcd");
list.add("abcdef");
//报错
int length = list.size();
for(int i = 0;i < length;i++){
if(list.get(i).equals("bc")){
list.remove(i);
}
}
}
想从ArrayList中删除某个元素,于是,我们就写了上面的代码,但是它却抛出了IndexOutOfBoundsException异常,原因是ArrayList在删除元素后会重新计算数量,把list.size放在for循环中即可:
for(int i=0;i= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
此功能入选“坑爹”排行榜的第4名。
空方法体导致死循环
如果循环的方法体为空,则会导致死循环,比如,下面的代码打印出数字1,2,3:
int i = 1;
while(i<4){
System.out.println(i++);
}
如果你在敲键盘的时候,不小心在while结尾处加了一个分号(如果方法体没有加大括号,更容易产生这种情况):
int i = 1;
while(i<4);{
System.out.println(i++);
}
你猜怎么着,上面的代码可以正常编译并运行,然而,它却陷入了死循环......是不是非常“坑爹”?for循环也存在类似的情况。
它高居排行榜的第3位。
神奇的=+
我们知道,对于类似a=a+b这样的赋值语句,有一种简写方式:a +=b,然而,如果你不小心写成了a =+ b,结果又会是什么呢?我们看看下面的代码:
int i = 100;
i =+ 2; //注意,加号在后面
System.out.println(i);
上面的代码既不会输出102,也不会报错,而是输出2,这的确出乎意料,完全不是我们期望的结果,太神奇了,非常的“坑爹”。
所以,它排名第2,稳居榜眼的位置。
Java注释能够识别Unicode
先看看代码:
public static void main(String[] args){
// \u000d System.out.println("Hello World!");
}
乍一看,代码都被注释掉了,当然不会输出任何东西,然而,它还是输出每个程序员都倍感亲切的Hello World,这是因为,unicode解码发生在代码编译之前,编译器将\u样式的代码进行文本转义,即使是注释也是这样,然后\u000a被转换成\n换行符,所以println代码得以正常执行。
这样的功能着实“坑爹”,极其违反常识,它必须要上榜,必须要荣登状元的位置。
以上就是编者总结的Java语言中十大“坑爹”的功能点,你是否认同这样的排名?你觉得有哪些功能更应该入选此榜单?欢迎后台留言讨论!
【End】
—— 推 荐 阅 读 ——
好文!必须分享在看