Java坑爹的功能有哪些

技术Java坑爹的功能有哪些本篇内容介绍了“Java坑爹的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、s

本文介绍了“Java坑爹有哪些功能”的知识。很多人在实际案例的操作中会遇到这样的困难。让边肖带领你学习如何处理这些情况。希望大家认真阅读,学点东西!

1、switch必须加上break才结束

对于多分支选择,一系列if-else-if语句会使代码的可读性变差,因此建议改用switch语句。但是,对于switch情况下的分支判断,必须添加break语句来停止其他情况的执行,例如:

int count=1;switch(count){ case 1: system . out . println(' one ');case 2: system . out . println(' two ');case3:System.out.println('三');}上面的代码将输出:

然而,这不是我们想要的,或者违背了我们的常识。如果满足某个条件,当然你只需要在这个条件下执行逻辑。其他情况应忽略,直接跳过。像上面的代码一样,您只需要输出一个。

当然,在每个案例的结尾加上break可以达到预期的效果。Java 12的SAO开关还是可以这样玩的。我推荐阅读这篇文章。

这个功能点有点“欺骗性”,这也是初学者常犯的错误,所以也是以荣誉上榜,排名第十。

2、逻辑运算符的“短路”现象

在使用逻辑运算符时,我们会遇到“短路”现象:一旦我们能确定整个表达式的值,就不会计算其余的。当然,这个功能点其实很有用,但是对于初学者来说,我们可能会感到惊讶,使用不当会导致“坑爹”的后果。例如,以下代码:

int num=1;system . out . println(false((num)=1));system . out . println(num);会输出false和1,因为逻辑and的前半部分是false,不管后半部分是真还是假,整个表达式都会返回false,所以后半部分不会再计算。如果将false更改为true,将执行后一部分,num将变为2。

在“坑爹”榜单中排名第9。

3、数组下标从零开始

Java程序员知道数组的下标是从零开始的。例如,如果我们想要遍历一个数组,我们可以使用以下方法:

int[]arr=newint[]{1,3,5,7,9 };for(inti=0;长度;I){ system . out . println(' the elementatis : ' arr[I]);}这与我们的日常生活体验是相悖的。通常情况下,计数从第一个元素开始,尤其是对于初学者来说,有点难以接受,会感到惊讶。即使是有经验的程序员,也有一些地方需要特别注意,比如:

Stringstr=' helloworldsystem . out . println(str . charat(1));我们知道,charAt的功能是获取字符串中某个位置的字符。但是,上面的代码并没有输出第一个字符h,而是e,因为数组是从零开始计数的,这也是一个“绝招”。当然,设计师这样做是因为内存偏移。

每次我写这个的时候,

样的代码时,都需要做这样的1到0的映射和转换(熟练了就是下意识的转换),确实也有点“坑爹”,所以它也不能幸免,排在第8位。

4、ArrayList遍历删除时报错

Talk is cheap,先上代码:

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);           }       }    }

想从ArrayList中删除某个元素,于是,我们就写了上面的代码,但是它却抛出了IndexOutOfBoundsException异常,原因是ArrayList在删除元素后会重新计算数量,把list.size放在for循环中即可:

for(int i=0;i<list.size();i++){       if(list.get(i).equals("bc")){           list.remove(i);       }    }

当然,这种方法也存在问题,建议使用迭代器的方式来删除元素。ArrayList 增删千万不要乱用&hellip;推荐看一下这篇。

对于不太熟练的程序员来说,有时候就会掉入这样的陷阱之中。这是排名第7的情况。关注微信公众号:Java技术栈,在后台回复:Java,可以获取我整理的 N 篇 Java 教程,都是干货。

5、字符转成数字的坑

有时候,我们想把字符直接通过类型转换变成整数,比如像下面这样:

char symbol = '8';    System.out.println((int) symbol);

我们想要的结果是8,然而,上面的代码却输出了56,略显“坑爹”,具体原因参考ASCII的知识。

6、while循环体的“障眼法”

对于while循环语句,如果你没有加上大括号,即使后面的语句挨在一起,也只会执行第一条statement,比如:

int i = 0;    while(i++<3)        System.out.print("A");        System.out.print("B");

上面的代码会输出:

AAAB

而不是3个A、3个B,更“坑爹”的是,如果两条语句放在一行上,迷惑性会更大:

int i = 0;    while(i++<3)        System.out.print("A");System.out.print("B");

上面这种写法同样是输出AAAB。所以,象这样的情况,哪怕只有一条语句,也建议加上大括号,完美避坑。

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

这确实太出乎意料了,同样的代码,只是数值不同(而且差别不太大的样子),就产生了不一样的输出,这也太离谱了。

原来,Integer中有一个静态内部类IntegerCache,在类加载的时候,它会把[-128, 127]之间的值缓存起来,而Integer a = 100这样的赋值方式,会首先调用Integer类中的静态valueOf方法,这个方法会尝试从缓存里取值,如果在这个范围之内就不用重新new一个对象了:

public static Integer valueOf(int i) {       if (i >= IntegerCache.low && i <= IntegerCache.high)           return IntegerCache.cache[i + (-IntegerCache.low)];      return new Integer(i);    }

此功能入选“坑爹”排行榜的第4名。IntegerCache的妙用和陷阱,推荐看一下。

8、空方法体导致死循环

如果循环的方法体为空,则会导致死循环,比如,下面的代码打印出数字1,2,3:

int i = 1;    while(i<4){       System.out.println(i++);    }

如果你在敲键盘的时候,不小心在while结尾处加了一个分号(如果方法体没有加大括号,更容易产生这种情况):

int i = 1;    while(i<4);{       System.out.println(i++);    }

你猜怎么着,上面的代码可以正常编译并运行,然而,它却陷入了死循环&hellip;&hellip;是不是非常“坑爹”?for循环也存在类似的情况。

它高居排行榜的第3位。

9、神奇的=+

我们知道,对于类似a=a+b这样的赋值语句,有一种简写方式:a +=b,然而,如果你不小心写成了a =+ b,结果又会是什么呢?我们看看下面的代码:

int i = 100;    i =+ 2;  //注意,加号在后面    System.out.println(i);

上面的代码既不会输出102,也不会报错,而是输出2,这的确出乎意料,完全不是我们期望的结果,太神奇了,非常的“坑爹”。

所以,它排名第2,稳居榜眼的位置。

10、Java注释能够识别Unicode

先看看代码:

public static void main(String[] args){        // \\u000d System.out.println("Hello World!");    }

乍一看,代码都被注释掉了,当然不会输出任何东西,然而,它还是输出每个程序员都倍感亲切的Hello World,这是因为,unicode解码发生在代码编译之前,编译器将\u样式的代码进行文本转义,即使是注释也是这样,然后\u000a被转换成\n换行符,所以println代码得以正常执行。

“Java坑爹的功能有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65132.html

(0)

相关推荐

  • SpringBoot怎么实现持久化登录状态获取

    技术SpringBoot怎么实现持久化登录状态获取本篇内容主要讲解“SpringBoot怎么实现持久化登录状态获取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringB

    攻略 2021年11月9日
  • 如何检查nodejs是否安装成功

    技术如何检查nodejs是否安装成功这篇文章主要为大家展示了“如何检查nodejs是否安装成功”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何检查nodejs是否安装成功”

    攻略 2021年11月7日
  • linux安装docker的几种方法(linux docker 安装)

    技术在Linux系统中安装Docker的过程是怎样的在Linux系统中安装Docker的过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在这篇博客

    攻略 2021年12月23日
  • Jupyter Notebook如何适应数据科学的发展方向

    技术Jupyter Notebook如何适应数据科学的发展方向本篇文章为大家展示了Jupyter Notebook如何适应数据科学的发展方向,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有

    攻略 2021年12月4日
  • ASP.NET数据库连接字符串的分析是怎样的

    技术ASP.NET数据库连接字符串的分析是怎样的这期内容当中小编将会给大家带来有关ASP.NET数据库连接字符串的分析是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、使用Ol

    攻略 2021年12月1日
  • 软件测试app问题之闪退

    技术软件测试app问题之闪退 软件测试___app问题之闪退闪退的原因分为种:一、软件本身有问题;二、系统出现问题。
    一、软件问题
    (1)app 不兼容系统当前系统版本
    (2)app有了新版本,没有跟新

    礼包 2021年11月24日