没内涵网站源码,企业开发网站建设,投稿作文网站,上海市建设安全协会网站王夑晟首先我们了解一下关于包装器类型 java是面向对象的语言#xff0c;但基本类型并不是面向对象的#xff0c;从而出现了包装器类型#xff0c;并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型#xff0c;它相当于将…首先我们了解一下关于包装器类型 java是面向对象的语言但基本类型并不是面向对象的从而出现了包装器类型并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型它相当于将基本类型包装起来使它具有了对象的性质丰富了基本类型的操作。并且包装器类型可以调用方法。
拆箱 拆箱---xxxValue()代码内部实现 包装类转化为基本数据类型 如下图两行代码的意思是一样的 装箱 装箱--valueOf()代码内部实现 基本类转化为包装类 如下图两行代码的意思是一样的
一、什么是128陷阱如下图所示
在上面的代码运行中发现当a和b是127的时候输出是true当a和b是128的时候输出的是false这里就涉及到了128陷阱
二、128陷阱详解
整数缓存机制 Java 对于值在 -128 到 127 之间的 Integer 对象会自动缓存。这意味着如果你使用自动装箱创建了一个 Integer 对象并且该值在 -128 到 127 之间Java 会使用相同的实例。他们指向的是同一处地址
超出缓存范围的对象 对于超出 -128 到 127 范围的值Integer 对象不会被缓存每次都会创建新的对象。因此即使两个 Integer 对象的值相同它们也不会是同一个实例。也就是他们指向的地址是不一样的。
三、如何避免128陷阱
在上面我们了解到当值超出了-128~127范围内就会创建一个新的对象执行的位置不一样那么我们要避免128陷阱的话就应该不应该用“”因为比较的是地址应该用equalsequals比较的具体的值
理解“”和equals的区别
使用 仅用于比较基本类型和检查对象引用是否相同。通俗来说就是比较地址指向使用 equals() 方法来比较对象的值是否相等。通俗来说就是比较值
可以看下面代码进行验证
总结
128陷阱是 Java 开发中容易遇到的一个问题尤其在处理 Integer 对象的比较时。理解整数缓存机制和正确使用 equals() 方法是避免这个陷阱的关键。