​用了这么长时间的JDK了,有没有老铁发现JDK的bug呢?从最早版本的JDK1.2到现在普及开的JDK1.8以来,JAVA经历了这么多年的风风雨雨,依然坚持在一线上,是不是感觉很神奇,但是,有没有多少人去主动的去看JDK的源码?还有你写好的代码编译出来的class类,有多少兄弟去看这里面的内容呢?

之前公司老大让我加了一点功能,然后编译成class类,我发现里面的代码和我写的竟然不一样,人家那排版做的,两个字“完美”。于是突发奇想,看看JDK有没有什么BUG来让我们娱乐一下,于是就写下了这么一篇文章来记录自己的心得体会!

兴趣来了,这就有继续的欲望了,我就开始查资料并且自己手动做了测试下面我们就来汇总一下这些存在在我们开发中的一些些小小的BUG吧。

JDK的Bug1--数组切割 

字符串的分割,大家都用过吧,split这个方法大家应该都熟悉的,但是有没有人去试过这个split去通过点来进行切割的时候会出现什么问题呢?

我们做个测试具体代码图如下:

在我们的印象中打印的结果肯定是3,但是实际情况和我们想的却完全的不一样,

打印结果却是0,但是相同的情况下我们是用其他的符号去进行切割呢?

这次打印结果却是和我们记忆中的结果完全相符了。

打印结果却是三,这是JDK的一个bug,我也不知道他为什么对点是这么的独特,难道是传统的偏爱?

所以在此得提醒做开发的各位小伙伴了,我们在使用字符串的split的时候,尽量的不要去使用点,也就是“.”,否则你会发现有时候写了半天的代码,你自己竟然都不知道错误竟然是因为JDK的一个小的Bug所引起来的,那时候估计你想把高斯林弄死的心都有。当然了,我是使用的现在用的最多的JDK1.8,如果说JDK1.8之后的版本,对这个进行修复的话,各位大哥能给我提个醒也成,感谢!

 JDK的Bug2--三元运算符

基本数据类型的三元运算符是可以赋值为Null的,编辑器是不会给我们报错的,但是当程序运行的时候就会出现错误了,我们来看一下代码展示

在我们编辑代码的时候是一点不出错,但是当我们条件成立的时候就会有这种错误。

其实这个错误很容易理解,为什么呢?三元运算符,哪有这么搞得,很少会出现这种不符合常理的错误,这只能说写代码的兄弟思路很开阔,但是也不排除会有这种情况的出现。所以得长点心,不能瞎搞不是?

JDK中不算Bug的Bug--ArrayList可通过构造函数传入非指定泛型的List并在get时出错

为什么标题会写不算Bug的Bug呢?因为这个比上面的还离谱。这是网上的网友发现的。

我们可以先看看代码展示

    JSONArray arr = new JSONArray(); //com.alibaba.fastjson.JSONArray    arr.add("s");    List<Long> list = new ArrayList<>(arr);     list.get(0); //Exception cannot cast String to Long

在看到这段代码的第一时间,我就想弄死这个写代码的兄弟,你前面的泛型和后边的传入的非指定的这种,好像没有人会这么写吧,不过后来想了一下,也不能弄死人家不是,这代码确实不报错呀!想来想去,还是觉得兄弟你有理,这个确实属于一个Bug,但是这是写代码的人不怎么会遇到的错误问题。所以我把它放到了第三个。

总结

总结起来其实蛮简单的,JDK我们用了这么多年,毕竟也算是稳定的很,作为一个开发者,要去尝试一下这些好玩的东西,说不定什么时候就能自己模仿出一个JDK来也说不定不是,所以Bug很多时候都是自己写出来的,作为一个合格的开发者要把自己的代码写的简单,逻辑严谨,少出一些笑话,实现功能就可以了。

希望各位干程序员的老铁们,继续一直坚持下去。

Java 极客技术公众号,是由一群热爱 Java 开发的技术人组建成立,专注分享原创、高质量的 Java 文章。如果您觉得我们的文章还不错,请帮忙赞赏、在看、转发支持,鼓励我们分享出更好的文章。

关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料。

JDK的小Bug你了解么?的更多相关文章

  1. JDK的一个关于stack的小bug

    在一个项目中,使用了一个java.util.Stack,总所周知,栈是先入后出的,那么遍历其中元素的时候,也应该按照这个顺序遍历才对,但是实际情况确不是,以下是测试代码. Stack stack = ...

  2. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  3. 解决JqueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug

    前些日子不是在做 使用Jquery-UI实现一次拖拽多个选中的元素操作嘛,在持续完善这个组件时遇到了一个关于拖放排序的bug.今天就着图片和代码重现一下,也顺便告诉大家如何解决这个问题. 首先先上图描 ...

  4. 淘宝WAP版小BUG分析

    前几天发现的一个淘宝WAP版的小BUG,就是用桌面版chrome看的时候产品评价中的图片显示不出来,都是图裂了. 这是什么原因呢?图片为什么会显示不出来呢?淘宝的技术人员.测试人员不可能没发现啊.开启 ...

  5. 关于一个小bug的修正

    python初学者,非常喜欢虫师的文章. 练习时发现一个小bug,http://www.cnblogs.com/fnng/p/3782515.html 验证邮箱格式一题中,第三个x不允许有数字,但是测 ...

  6. 用 parseInt()解决的 小 bug

    在做轮播模块的时候遇到问题是:你在 连续指示小按钮 时候再去 只有 点击 下一张按钮,出现bug: 指示小按钮的 className 当前显示的 calssName 为 undefined ! // ...

  7. iOS开发之使用UICollectionView实现美团App的分类功能【偶现大众点评App的一个小bug】

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  8. Flex Validator的小BUG

    Flex中对同一控件如TextInput进行多种格式校验的情况下,如不注意,可能导致错误信息不显示的BUG,比如 <fx:Array id="validators"> ...

  9. Flutter实战视频-移动电商-34.列表页_小BUG的修复

    34.列表页_小BUG的修复 当高粱酒的子类没有数据返回的时候就会报错. 解决接口空数据报错的问题 没有数据的时候,给用户一个友好的提示, 我们没有数据的时候还要告诉用户,提示一下他没有数据,在我们的 ...

随机推荐

  1. A1100 Mars Numbers (20 分)

    一.技术总结 这一题可以使用map进行想打印存储,因为数据量不是很大,最后直接输出.但是还是觉得没有必要. 主要考虑两个问题,首先是数字转化为字符串,实质就是进制转化,但是有点不同,如果十位有数字,个 ...

  2. Zookeeper搭建集群及协同

    Zookeeper搭建集群及协同 协同的实现 首先启动一个zkCli客户端(zkCLi-1),创建一个workers节点. create /workers 使用ls监控当前节点. ls -w /wor ...

  3. Azure Sphere Development Environment Setup

    1. Visual Studio 目前,Visual Studio 2017/2019支持Azure Sphere开发,后续,微软会加入Visual Studio Code的支持.以Visual St ...

  4. 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第24章       STM32H7的Cache解读(非常重要 ...

  5. 《js高程》笔记总结二(变量,作用域,内存问题)

    理解基本类型和引用类型的值,理解执行环境,理解垃圾收集 基本类型的值和引用类型的值 基本类型:简单的数据段,引用类型:指可能由多个值构成的对象(在将一个值赋值的时候,解析器必须知道这个值是基本类型值还 ...

  6. SQLserver无法删除数据库 "XXXX",因为该数据库当前正在使用。

    问题描述: 有时候删除库的时候,会显示无法删除数据库,因为该数据库当前正在使用. 解决方法: 方法一: EXEC msdb.dbo.sp_delete_database_backuphistory @ ...

  7. 基于appium的模拟单点或多点触屏操作

    一.单点触控 TouchAction类:将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受该链条后,解析各个动作,逐个执行,TouchAction类提供了以下几种方法: 短按:pres ...

  8. wpf 两个自定义控件

    wpf 两个自定义控件 一个是IP控件,一个滑动条.先看下效果图 IPControl 1.实际工作中有时需要设置IP信息,就想着做一个ip控件.效果没有window自带的好,需要通过tab切换.但也能 ...

  9. js 时分秒转化为秒

    var time = '00:02:10'; var hour = time.split(':')[0]; var min = time.split(':')[1]; var sec = time.s ...

  10. CODING 告诉你硅谷项目经理的项目管理之道

    写在前面 优秀的项目管理者是怎么工作的,如何把一个研发团队的绩效激发到最大? 我们精心挑选了几篇硅谷科技公司研发管理者的 README 进行翻译. README 主要用来向团队成员展示项目管理者的工作 ...