摘要:二调试过程经过后发现,在类型数值比较中使用的是,咋看之下没啥问题,其实是有问题的在这里为包装类,是一个对象。使用包装类重写过的方法就可以正确对包装类型的数值正确进行判断了。
一、问题描述
在一次对树形结构的数据遍历中,出现了树形变乱的问题,在此遍历的ID采用Long类型,在数值比较中达到某个界定值后,树形结构变形。
二、调试过程经过debug后发现,在Long类型数值比较中使用的是 “==” ,咋看之下没啥问题,其实是有问题的!在这里Long为包装类,是一个对象。
在这里回顾一下基本的知识吧:
判断两个对象是否为同一对象,是通过内存中地址是否一致为判定的,使用 == 或.equals(obj)即可进行判定。
那么为什么一些数值比如1、2、3、4之类的Long对象使用==可以正确判断呢?
在这里我们可以看到Long类型的数值从-128~127 在一开始已经放进去了静态代码块里面的cache数组里面,
而基本包装类型在自动装箱成包装类型的时候会从缓存里面取:
可以看到在数字大于-128 或 小于127的时候,是直接从cache里面取出来的,所以在这个数值范围内的Long类型对象是可以直接进行比较的,但是超出了这个范围,就会new 新的Long类型,这就导致使用 == 判断不正确,也就是树形结构在id超出127后就发生了变化。使用包装类重写过的equals方法就可以正确对包装类型的数值正确进行判断了。
四、后续结语后来在查看《阿里巴巴java开发规范》时候也看到了:
这些不止是适用于Integer或是Long,所有包装类都适用。
有些问题虽然不大,但是却是值得我们去深思的 。 加油。 :)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72813.html
摘要:多用户博客系统该多用户博客系统,是在之前一开始学习的使用的时候,大佬说让去做一个系统性的项目,这样前后端兼顾,从里面去系统性的总结东西,索性就做了一个这个,项目的架子是根据一个开源项目的指导进行入坑的,陆陆续续用了四个月时间,由于是刚步入大 多用户博客系统 该多用户博客系统,是在之前一开始学习node的使用的时候,大佬说让去做一个系统性的项目,这样前后端兼顾,从里面去系统性的总结东西...
摘要:这一点其实是非常不妥的,有潜在的安全问题。这次,在项目中终于采用了以它为基础的集群方案。相反,使用一个周期,但针对每个生成一个一次性的,模拟随机发送。同时,要记得用完之后立即释放。 当初创建简书账号的时候曾立下宏愿,希望保持周更,无奈现实残酷,整个5月都处于忙忙碌碌的状态,居然令这个本来并不算太宏伟的目标难以为继,最终导致5月份交了白卷!【好吧,我承认,是我意志不够坚定,太懒了,;)】...
摘要:不相等的对象要具有不相等的哈希码为了哈希表的操作效率,这一点很重要,但不是强制要求,最低要求是不相等的对象不能共用一个哈希码。方法和方法协同工作,返回对象的哈希码。这个哈希码基于对象的身份生成,而不是对象的相等性。 本文面向 刚学完Java的新手们。这篇文章不讲语法,而是一些除了语法必须了解的概念。 将要去面试的初级工程师们。查漏补缺,以免遭遇不测。 目前由于篇幅而被挪出本文的知识...
摘要:接收三个参数分别为回调和,其中与是可选参数。官网释义排序一个列表组成一个组,并且返回各组中的对象的数量的计数。类似,但是不是返回列表的值,而是返回在该组中值的数目。 继续前面的内容,前文我们提到了很多方法的讲解,其实到这里就已经差不多了,因为大部分代码其实都是套路,一些基础函数再灵活变化就可以组成很多实用的功能。 _.sortBy = function(obj, iteratee,...
阅读 809·2021-09-22 15:18
阅读 1160·2021-09-09 09:33
阅读 2741·2019-08-30 10:56
阅读 1164·2019-08-29 16:30
阅读 1457·2019-08-29 13:02
阅读 1443·2019-08-26 13:55
阅读 1624·2019-08-26 13:41
阅读 1910·2019-08-26 11:56