Java 中 10 大坑爹功能!
点击上方 Java后端,选择 设为星标
优质文章,及时送达
作为一门面向对象的编程语言,Java凭借其简单易用、功能强大的特点受到了广大编程爱好者的青睐,伴随着开源社区的推波助澜,Java语言更是席卷全球,势不可挡,在世界各地都有Java技术的从业者,它也常年高居编程语言排行榜的首位,足以表明Java的强悍与王者之风。
然而,即便是如此强大的编程语言,也有很多“坑爹”的功能,稍不注意,我们就会掉入坑里,轻则遭到同事的嘲笑和鄙视,重则造成悲惨后果而不得不跑路。
今天我们就来梳理一下Java中最“坑爹”、最违反常识的功能点,以排行榜的方式发布,以飨读者。说明一下,本文中的代码基于JDK8来编译实现。
1、switch必须加上break才结束
int count = 1;
switch(count){
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("three");
}
one
two
three
然而,这并不是我们想要的,或者说违反了我们的常识。满足了某种条件,当然就只需要执行这种条件下的逻辑即可,其他的case应该不予理会、直接跳过,象上面这段代码,只需要输出one就行了。
当然,在每个case结尾处加上break就可以达到我们期望的效果。
这个功能点稍显“坑爹”,也是初学者常犯的错误,所以它也光荣上榜,排名第10位。
2、逻辑运算符的“短路”现象
int num = 1;
System.out.println(false && ((num++)==1));
System.out.println(num);
它在“坑爹”榜单中位列第9位。
3、数组下标从零开始
int[] arr = new int[]{1,3,5,7,9};
for(int i=0;i<arr.length;i++){
System.out.println("the element is:"+arr[i]);
}
String str = "hello world";
System.out.println(str.charAt(1));
每次在编写这样的代码时,都需要做这样的1到0的映射和转换(熟练了就是下意识的转换),确实也有点“坑爹”,所以它也不能幸免,排在第8位。
4、ArrayList遍历删除时报错
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
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);
}
}
}
for(int i=0;i<list.size();i++){
if(list.get(i).equals("bc")){
list.remove(i);
}
}
对于不太熟练的程序员来说,有时候就会掉入这样的陷阱之中。这是排名第7的情况。
5、字符转成数字的坑
char symbol = '8';
System.out.println((int) symbol);
6、while循环体的“障眼法”
int i = 0;
while(i++<3)
System.out.print("A");
System.out.print("B");
AAAB
int i = 0;
while(i++<3)
System.out.print("A");System.out.print("B");
7、Integer类有缓存
public static void main(String[] args){
Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d = 200;
System.out.println(a==b);
System.out.println(c==d);
}
true
false
这确实太出乎意料了,同样的代码,只是数值不同(而且差别不太大的样子),就产生了不一样的输出,这也太离谱了。
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
此功能入选“坑爹”排行榜的第4名。
8、空方法体导致死循环
如果循环的方法体为空,则会导致死循环,比如,下面的代码打印出数字1,2,3:
int i = 1;
while(i<4){
System.out.println(i++);
}
int i = 1;
while(i<4);{
System.out.println(i++);
}
它高居排行榜的第3位。
9、神奇的=+
int i = 100;
i =+ 2; //注意,加号在后面
System.out.println(i);
所以,它排名第2,稳居榜眼的位置。
10、Java注释能够识别Unicode
public static void main(String[] args){
// \\u000d System.out.println("Hello World!");
}
这样的功能着实“坑爹”,极其违反常识,它必须要上榜,必须要荣登状元的位置。
作者:践行精神自由
如果看到这里,说明你喜欢这篇文章,请 转发、点赞。同时 标星(置顶)本公众号可以第一时间接受到博文推送。
推荐阅读
4. 二维码会被人类扫完吗?
获取方式:点“ 在看,关注公众号 Java后端 并回复 777 领取,更多内容陆续奉上。
喜欢文章,点个在看