​用了这么长时间的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. Tree-Shaking性能优化实践 - 原理篇

    Tree-Shaking性能优化实践 - 原理篇   一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前 ...

  2. ubuntu 18.04 安装mysql 遇到语言格式不兼容性问题解决

    安装mysql的时候,遇到了这样一个错误:perl: warning: Setting locale failed. perl: warning: Please check that your loc ...

  3. IT兄弟连 HTML5教程 HTML文档主体标记body

    在HTML的<body>和</body>标记中定义文档的主体,包含文档的所有内容(比如文本.超链接.图像.表格和列表等等).<body>标签有自己的属性,设置< ...

  4. Java队列和定时器Timer

       一: Queue详解    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构    Queue接口与List.Set同一级别,都是继承了Collection接口.Linked ...

  5. git 清除远程仓库已经删除的本地分支 清除已经合并到master的本地分支

    在gitlab中执行deleted merged.也是可以在本地看到这些分支的 查看本地分支和追踪情况: git remote show origin 可以发现远程分支已被删除的分支,根据提示可以使用 ...

  6. linux如何修改权限详解

    前言 今日,同事问我,服务器上拷贝过来的tomcat,怎么执行不了./startup.sh.于是,我一想,那肯定是没有权限的问题了.于是使用chmod命令更改了权限后,就可以执行了.项目正常启动.我想 ...

  7. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...

  8. Tomcat8史上最全优化实践

    Tomcat8史上最全优化实践 1.Tomcat8优化 1.1.Tomcat配置优化 1.1.1.部署安装tomcat8 1.1.2 禁用AJP连接 1.1.3.执行器(线程池) 1.1.4 3种运行 ...

  9. JavaWeb之Servlet(3)

    Servlet(3) HttpServletRequest 该类的对象封装了所以客户端提交过来的数据 获取所有请求头数据 public java.util.Enumeration<E> g ...

  10. 高强度学习训练第五天总结:JAVA对象+GC

    第五天了.. 理清了Java对象的创建过程,分配内存,线程安全性,对象头和对象的访问定位 理清了JVM GC的发展历史,算法,例如: 可达性分析 引用计数法 标记-清楚法 复制算法 标记-整理算法 分 ...