感觉学java要饿死了_这些年我们在java中遇到过的坑,你遇到过几个

1、Java注释能够识别Unicode

关于问题还引申出一个概念“Unicode 逃逸”,并且为什么会有这种机制,有什么作用,我之前写过一篇文章,这里面已经做了详细的介绍,请大家点击并仔细阅读这篇文章:

2、Integer类型的数值比较

大家来看看下面的这段代码执行的结果是什么?

public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);System.out.println(c == d);}

它的执行结果是:

b9d15a702def66c15a2667787d65276d.png

如果你答对了,那么恭喜你,你已经知道他的原理了,可以跳着看下面的第三个坑。

对于比较Integer类型的数据,相信很多人会用“==”去比较,而且很多人感觉输出的结果是两个true。实际上这段代码的输出结果是true和false;

原因如下:

它的内部维护了一个缓存池,如果超出了这个缓存池(-128到127),它就会new一个新的Integer对象。但是数字只要在这个缓存池范围内,就不会new一个新对象,它会直接取出对象而不是创建新的对象,所以他们是相等的,但是如果超过了这个范围,那么它就创建一个新的对象(-2147483648到-128和128到2147483647),所以返回的会是false结果。

因此我们比较两个Integer是相等的时候应该用equals()方法或者用a.intValue()==b.intValue()这两个方法来比较

3、空指针异常

在某些场景下,我们经常会使用对象就get或者set值,如果这个对象为空的时候,也就是null.get()或者null.set()都会报空指针异常

解决方法:

我们每次都需要判断这个对象是否为空,不要嫌麻烦,要保证代码的健壮性。

4、空方法体导致死循环

如果循环的方法体是空的,那么就会导致该循环成为一个死的循环,比如,下图所示的代码会打印出1,2,3,4,如图所示:

261b7e2355cb2188e91611e3f3f2afbc.png

如果你不小心在while后面多打了一个分号,如下:

58ad0eddb6e94d8c29263fb02cc42e1e.png

大家仔细看看这段代码将会输出什么结果?

你们不妨运行下试试,已经陷入了死循环,当然for循环也存在这样的情况。这是非常坑的事情。

5、split()方法参数特殊字符需要转译的问题

String[] arr = amtStr.split("\.");

String[] arr = amtStr.split("\|");

6、ArrayList遍历删除时报错

大家觉得下面的这段代码有问题吗》

public static void main(String[] args){List list = new ArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");int length = list.size();for (int i = 0; i < length; i++) {if (list.get(i).equals("2")) {list.remove(i);}}}

这段代码是从ArrayList中删除元素,上面的代码会抛出IndexOutOfBoundsException异常,原因是ArrayList在删除元素后会重新计算数量。

825ae7fc7840417162eae5588acb3a11.png

那么怎么样解决这个问题呢,我们只需要把list.size()放在for循环中就可以了,上面的代码我们改造下就没有问题了,如下所示:

public static void main(String[] args){List list = new ArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");for (int i = 0; i < list.size(); i++) {if (list.get(i).equals("bc")) {list.remove(i);}}}

像这样的坑还有很多,大家日常开发中还遇到过哪些坑呢,不妨说出来一起交流下!

原创声明:本文为【Java学习提升】原创博文,转载请注明出处。

本文来源于公众号:【Java学习提升】 专注于Java领域技术分享,Java知识体系学习、分享面试经验,让我们结伴而行,共同成长!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值