当前位置: 首页 > ds >正文

java之Integer、Double自动拆装箱比较,踩坑值int和Integer比较之空指针异常

今天在测试代码的时候,同事问我新加的一段逻辑出现了空指针异常

看了下,是很久前自己写的代码,int和Integer对象比较的时候,用了==在不传Integer的情况下,会出现空指针异常。查资料回忆了一下,int和Integer的比较关注重点

1.Integer是int的封装类,int与Integer比较时,Integer会自动拆箱,如果都有相同的值(比如100)无论怎么比,int与Integer都相等。

2.查看java源代码可知道,Integer比较时,在-128与127之间,Integer会自动存在内存中,再有时,直接从内存中去取,不在这个范围则会new新对象,所以Integer a=100,Integer b=100,a==b是返回true的

同时Integer与new Integer永远都不相等。

范例

int a=127;int b=127;Integer c = 127;Integer d = new Integer(127); Integer e=127;

a==b true;     a==c;true        c==d;false;       a==d;true;        c==e true;

int a=128;int b=128;Integer c=128;Integer d=128;Integer e = new Integer(128);

a==b true;    a==c true;     a==e true;    c==d false;    c==e  false;

java的自动装箱与自动拆箱

自动装箱就是将基本数据类型转换为包装器类型,自动拆箱就是将包装器类型转为基本数据类型。

装箱过程系统执行了Integer.valueOf(99);

在-128到127范围,会生成同一个对象,在范围之外,会执行new Integer(99);

装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能

拆箱过程执行了int totlprim = total.intValue();

直接返回value

正确的比较方法:

比较相等:Objects.equals(c,d);则以上所有比较都为true;

比较大小:如果不确定是否包含空指针

int a =127,Integer b = null;
//方法1
Stream.of(a, b).filter(Objects::nonNull) // 过滤掉null值.map(Optional::of)       // 将非null值转换为Optional.reduce((a1, b1) -> a1.flatMap(av -> b1.map(bv -> av.compareTo(bv)))) // 安全比较两个值.ifPresent(result -> System.out.println(result.get())); // 处理结果,如果有的话
//方法2Comparator<Integer> safeComparator = Comparator.nullsLast(Comparator.naturalOrder());int result = safeComparator.compare(a, b);// 处理result,例如使用Comparator.nullsLast()来改变null的处理方式(例如放在最后)System.out.println(result);

http://www.xdnf.cn/news/3427.html

相关文章:

  • WPF之TextBox控件详解
  • 第八节:目录操作
  • 二叉树的路径总和问题(递归遍历,回溯算法)
  • 如何理解神经网络训练的循环过程
  • 产品月报|睿本云4月产品功能迭代
  • MS31860T——8 通道串行接口低边驱动器
  • 制造业行业ERP软件部署全流程指南:从选型到维护,怎么做?
  • 多线程爬虫中实现线程安全的MySQL连接池
  • Java程序员如何设计一个高并发系统?
  • 基于MCP协议实现一个智能审核流程
  • 虚拟内存笔记(一)
  • AVPro Video加载视频文件并播放,可指定视频文件的位置、路径等参数
  • 运用ESS(弹性伸缩)技术实现服务能力的纵向扩展
  • foxmail时不时发送不了邮件问题定位解决过程
  • 苍穹外卖11
  • Windows查看和修改IP,IP互相ping通
  • 使用模块中的`XPath`语法提取非结构化数据
  • Learning vtkjs之ImageMarchingCubes
  • 100 个 NumPy 练习
  • centos安装nginx
  • 新手小白如何查找科研论文?
  • 2025深圳杯东三省数学建模竞赛选题建议+初步分析
  • 26个脑影像工具包合集分享:从预处理到SCI成图
  • 为什么定位关闭了还显示IP属地?
  • 软考中级-软件设计师 数据库(手写笔记)
  • TS类型体操练习
  • Rancher 2.6.3企业级容器管理平台部署实践
  • ESP32-C3 Secure Boot 使用多个签名 Key
  • FEKO许可管理
  • YOLO11改进-模块-引入跨模态注意力机制CMA 提高多尺度 遮挡