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

128陷阱

一、128陷阱的寓意

“128陷阱”并非一个具体的编程错误或数学难题,而是一个象征性的说法,它代表着那些容易被忽视、难以预测且可能导致严重后果的隐蔽挑战。这些陷阱可能源于算法设计的微妙缺陷、数据处理的边界条件、思维模式的固化,或是生活中的人际交往、决策制定等方面。

二、编程中的128陷阱
  1. 边界条件:在编程中,处理数组、字符串或循环时,很容易忽视边界条件,如数组越界、空指针异常等。这些看似不起眼的错误,往往会导致程序崩溃或数据损坏。

  2. 类型转换:不同数据类型之间的转换,特别是隐式转换,可能引发意想不到的结果。例如,在Java中,将大整数赋值给较小范围的数据类型时,会发生截断,导致数据丢失。

  3. 资源泄露:在处理文件、数据库连接或网络通信等资源时,如果未能正确释放,将导致资源泄露,进而影响系统性能甚至导致崩溃。

  4. 并发问题:多线程编程中,竞态条件、死锁和数据不一致等问题,如同隐藏在代码深处的陷阱,难以捉摸且破坏力巨大。

请看下面的程序,注释为运行结果。

	Integer b = 127;
	Integer b1 = 127;
	System.out.println(b == b1);    //true
	
	Integer c = 128;
	Integer c1 = 128;
	System.out.println(c == c1);    //false

在Java中,Integer类型是一个包装类,用于将基本数据类型int的值封装成对象。Java的自动装箱(autoboxing)和拆箱(unboxing)机制允许我们在基本数据类型和对应的包装类之间自动转换。然而,这种机制在特定情况下会引入一些微妙的行为,特别是涉及到Integer对象的缓存时。

Java的Integer缓存机制是为了优化性能和减少内存消耗。在Java 5及以后的版本中,Integer类维护了一个内部缓存,用于存储范围在-128到127之间的整数。当创建这个范围内的Integer对象时,如果缓存中已经有了对应的值,就会直接返回缓存中的对象,而不是创建一个新的对象。这个行为是通过Integer.valueOf(int i)方法实现的。

然而,对于超出这个范围(即小于-128或大于127)的整数,每次调用Integer.valueOf()都会创建一个新的Integer对象。

  1. Integer c = 128; 这行代码发生了自动装箱,因为128超出了-128到127的范围,所以Java不会从缓存中获取Integer对象,而是会创建一个新的Integer实例。

  2. Integer c1 = 128; 同样地,这行代码也会创建一个新的Integer实例,因为128超出了缓存范围。

  3. System.out.println(c == c1); 这行代码比较的是两个Integer对象的引用是否相同。由于cc1指向的是两个不同的Integer对象(即使它们的值都是128),所以比较结果是false

如果你想要比较两个Integer对象的值是否相同,应该使用equals()方法,而不是==操作符。

相关文章:

  • uniapp-原生android插件开发摘要
  • Android Studio安装与配置详解
  • 软件工程-软件测试
  • fortify安全扫描Access Control: Database问题解决
  • Java 8 到 Java 17 主要新特性
  • 高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数
  • 私有化部署大模型推理性能分析
  • SQL的select语句完整的执行顺序
  • 【Java基础】Java 中的接口
  • 云服务培训六-云上安全与管理
  • 虚拟机Linux操作(持续更新ing)
  • Spring拦截器与DispatcherServlet
  • 鸿蒙通过用户首选项实现数据持久化
  • 【ISP】AF自动对焦
  • 【3天快速入门WPF】13-MVVM进阶
  • 基于zookeeper搭建kafka集群
  • API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南
  • 企业数据中台建设思路
  • 【Spring】Spring事务管理
  • AUTOSAR简介
  • seo对网站的重要性/宁波seo网站
  • 诸暨哪些公司可以制作网站/优化设计