Java基础——泛型(2) # Integer-128陷阱

在上一篇博客里解释了什么是泛型的定义,本篇笔记来更进一步的介绍泛型的内容。

Java基础——泛型定义icon-default.png?t=O83Ahttps://blog.csdn.net/2301_78566776/article/details/144022022?spm=1001.2014.3001.5502


补充:128陷阱

        128陷阱是Java编程中的一个常见现象,主要涉及Integer类型的自动装箱、拆箱以及对象比较。以下是对128陷阱的详细解析:

一、背景知识

  1. 基本数据类型与包装类型
    • Java中的基本数据类型包括:boolean、char、byte、short、int、long、float、double。
    • 对应的包装类型则为:Boolean、Character、Byte、Short、Integer、Long、Float、Double。
  2. 自动装箱与拆箱

        自动装箱

                Java编译器会自动将基本数据类型转换为对应的包装类型。例如,Integer a = 100; 会被编译器自动转换为 Integer a = Integer.valueOf(100);

        自动拆箱

                Java编译器会自动将包装类型转换为对应的基本数据类型。

例如,int b = a.intValue(); 会被编译器自动处理。

二、128陷阱现象

  1. 现象描述

    • 当使用==比较两个Integer对象时,如果这两个对象的值在-128到127之间(包括-128和127),则比较结果为true
    • 如果这两个对象的值超出这个范围,则比较结果为false,即使它们的数值相同。
  2. 示例代码

	public class IntegerTrap {
	    public static void main(String[] args) {
	        Integer num1 = 127;
	        Integer num2 = 127;
	        System.out.println(num1 == num2); // 输出 true
    
   	        Integer num3 = 128;
	        Integer num4 = 128;
	        System.out.println(num3 == num4); // 输出 false
	    }
	}

三、原因分析

  1. Integer缓存机制

    • Integer类型在Java中有一个缓存机制,该机制会缓存-128到127之间的所有Integer对象。
    • 当在这个范围内进行自动装箱时,Java会直接使用缓存中的对象,而不是创建一个新的对象。
  2. 对象比较

    • 使用==比较两个对象时,实际上是在比较它们的内存地址(即引用)。
    • 在-128到127范围内,由于使用了缓存机制,两个相同的数值会被包装到同一个对象中,因此它们的内存地址相同,比较结果为true
    • 超出这个范围时,每次自动装箱都会创建一个新的Integer对象,因此即使数值相同,它们的内存地址也不同,比较结果为false

四、解决方法

为了避免128陷阱,建议在使用==比较Integer对象时,改为使用equals()方法。因为equals()方法会比较两个对象的值是否相等,而不是它们的内存地址。

	Integer num3 = 128;
	Integer num4 = 128;
	System.out.println(num3.equals(num4)); // 输出 true
        综上所述,128陷阱是Java中Integer类型自动装箱和对象比较时的一个特殊现象。了解并避免这个陷阱对于编写健壮的Java代码至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Webgl_glslThreejs】制作流水效果/毛玻璃效果材质

效果预览 shadertory源码 source: https://www.shadertoy.com/view/lldyDs 材质代码 import { DoubleSide, ShaderChunk, ShaderMaterial, TextureLoader } from "three"; /** * * source https://www.shadertoy.com/view/lldyDs */export default fu…

[已解决]Visual Studio 2022中如何同时打开多个项目多个独立窗口

同时运行两个VS2022程序,即点击运行Visual Studio 2022.exe后,再点击运行一次运行Visual Studio 2022.exe,效果如图

Windows安装Node.js

当出现这个的时候,是说明没有安装Node.js。 Node.js安装包及源码下载地址为:Node.js — Download Node.js Package Manager: 使用系统自带的包管理工具(如 apt、yum、brew)安装。自动管理依赖和更新,适合命…

SVL-Adapter: Self-Supervised Adapter for Vision-Language Pretrained Models

当前的问题 CLIP和CLIP-Adapter等方法的一个主要局限性是,它们没有对视觉编码器所编码的底层表示进行显著的修改。原因很简单:微调大型模型需要大量的监督,这在低监督学习设置中是很难获得的。如果下游分类任务的图像来自与互联网常见图像相…

MySQL之创建和管理表

目录 1. MySQL中的数据类型​编辑​编辑 2. 创建和管理数据库 方式1:创建数据库 方式2:创建数据库并指定字符集 方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 ) 总结 2.2 使用数据库 查看当…

深度学习模型:门控循环单元(GRU)详解

本文深入探讨了门控循环单元(GRU),它是一种简化版的长短期记忆网络(LSTM),在处理序列数据方面表现出色。文章详细介绍了 GRU 的基本原理、与 LSTM 的对比、在不同领域的应用以及相关的代码实现,…

解决“磁盘已插上,但Windows系统无法识别“问题

电脑上有2块硬盘,一块是500GB的固态硬盘,另一块是1000GB的机械硬盘,按下开机键,发现500G的固态硬盘识别了,但1000GB的机械硬盘却无法识别。后面为了描述方便,将"500GB的固态硬盘"称为X盘&#xf…

mysql_题库详解

1、如何创建和删除数据库? 1)创建数据库 CREATE DATABASE 数据库名; 2)删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别? 1)事务:MyISAM 不支持事务 InnoDB 支持 2)行锁/表锁&a…

大数据新视界 -- 大数据大厂之 Hive 数据安全:加密技术保障数据隐私(下)(16/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

存储服务器一般做是做什么阵列?详细列举一下

存储服务器通常使用 RAID(Redundant Array of Independent Disks) 阵列技术来管理磁盘,以提高数据的性能、可靠性和可用性。所选择的 RAID 类型取决于存储服务器的具体用途和需求,比如性能要求、容量需求、容错能力等。 以下是存…

2024142读书笔记|《别无归处是归处》——一壶酒,一竿身,世上如侬有几人

2024142读书笔记|《别无归处是归处》——一壶酒,一竿身,世上如侬有几人 《别无归处是归处:吴镇的“渔父”画题(文人画的真性)》作者朱良志。诗词与古画并存的一本书,古画是比较偏复古黯淡微黄及墨色的&…

opencv 区域提取三种算法

opencv 区域提取三种算法 1.轮廓查找 findContours()函数&#xff0c;得到轮廓的点集集合 cv::vector<cv::vector<Point>> contours;threshold(roiMat,binImg,m_pPara.m_nMinGray,m_pPara.m_nMaxGray,THRESH_BINARY);//膨胀处理Mat dilaElement getStructuringE…

神经网络中的损失函数(Loss Function)

损失函数&#xff08;Loss Function&#xff09;在机器学习和深度学习中扮演着至关重要的角色&#xff0c;它是衡量模型预测值与实际值之间差异程度的函数。通过最小化损失函数&#xff0c;我们可以优化模型的参数&#xff0c;使其预测结果更加准确。 一、损失函数的定义 损失函…

服务器命令行复制文件

服务器拷贝大文件太慢&#xff0c;而且容易断线&#xff0c;可以采用命令行复制文件 复制windows server服务器文件到linux服务器 scp D:\bim\uploadPath.zip ruoyixx.xx.xx.xx:/home/ruoyi/temp/uploadPath.zip 复制linux服务器文件到windows server服务器 scp ruoyixx.xx.…

TiDB 关联子查询及半连接的优化实践

导读 TiDB 针对子查询语句会执行多种子查询相关的优化 ( https://docs.pingcap.com/zh/tidb/stable/subquery-optimization )&#xff0c;以提升子查询的执行性能。半连接语句和关联子查询语句是常用的两类子查询&#xff0c;TiDB 优化器默认包含一些自动优化策略&#xff0c;…

Pytest使用Jpype调用jar包报错:Windows fatal exception: access violation

问题描述 ​   之前我们有讲过如何使用Jpype调用jar包&#xff0c;在成功调用jar包后&#xff0c;接着在Pytest框架下编写自动测试用例。但是在Pytest下使用Jpype加载jar包&#xff0c;并调用其中的方法会以下提示信息&#xff1a; ​   虽然提示信息显示有Windows显示致命…

RVO动态避障技术方案介绍

原文&#xff1a;RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题&#xff0c;当我们寻路的时候&#xff0c;其它人也在寻路&#xff0c;如何避免不从其它人的位置穿过。这个叫做动态避障&#xff0c;目前主流的解决方案就是RVO。本节我们来介绍…

浅谈人工智能之基于容器云进行图生视频大模型搭建

浅谈人工智能之基于容器云进行图生视频大模型搭建 根据之前我们所讲过的内容&#xff1a; 文生图 文生视频 我们继续讲解图生视频大模型搭建。 引言 随着深度学习技术的不断发展&#xff0c;图生视频&#xff08;image-to-video&#xff09;大模型成为了计算机视觉和自然语言…

十四(AJAX)、AJAX、axios、常用请求方法(GET POST...)、HTTP协议、接口文档、form-serialize

1. AJAX介绍及axios基本使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&q…

【微服务】 Eureka和Ribbon

一、Eureka 服务调用出现的问题&#xff1a;在远程调用另一个服务时&#xff0c;我们采用的解决办法是发送一次http请求&#xff0c;每次环境的变更会产生新的地址&#xff0c;所以采用硬编码会出现很多麻烦&#xff0c;并且为了应对并发问题&#xff0c;采用分布式部署&#…