Integer 源码记录
Integer
公共方法结构
注意:
- 通过构造函数创建一个Integer对象,每次都会返回一个新的对象,如果使用 == 进行对象的比较,那么结果是false。
public Integer(int value) {this.value = value;}
- 与之对应的是,
valueOf
方法,在Integer类中,默认缓存了 -128——127 的数据,在此范围内的数据,使用 == 进行比较,返回的结果是 true
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}
- 在平时的开发过程中,对于 Integer 等包装类进行 相等比较 时,使用 equals 方法
public static int parseInt(String s, int radix)方法
radix
参数,将x进制 转为 10进制compareUnsigned
方法的作用是比较两个整数x
和y
,将它们作为无符号整数进行比较。虽然Java中没有直接的无符号整数类型,但可以通过位操作或加上一个固定偏移量的方式,间接实现无符号整数的比较。
代码解释:
java
复制代码
public static int compareUnsigned(int x, int y) {return compare(x + MIN_VALUE, y + MIN_VALUE);
}
1. 无符号整数比较的背景:
在Java中,int
类型是32位有符号整数,数值范围是从 -2^31
到 2^31 - 1
(即从 -2147483648
到 2147483647
)。当我们使用compare(int x, int y)
方法时,它会进行有符号整数比较,正数总是比负数大。但有时候我们需要像无符号整数一样对两个整数进行比较,也就是不区分正负号。
2. MIN_VALUE的作用:
Integer.MIN_VALUE
是 -2147483648
。在无符号比较中,通过对每个数加上 MIN_VALUE
,我们可以把原本范围为 -2^31
到 2^31 - 1
的有符号整数映射到 0
到 2^32 - 1
的无符号整数范围。这是因为加上 MIN_VALUE
相当于将负数部分映射到无符号整数的高位。
例如:
- 当
x
是负数时,加上MIN_VALUE
使得它变成了一个较大的正数(无符号范围的高位)。 - 当
x
是正数时,加上MIN_VALUE
会把它映射到无符号整数的低位。
3. compare(x + MIN_VALUE, y + MIN_VALUE)
:
Java已经有一个compare(int x, int y)
方法用于比较有符号整数:
compare(x, y)
如果x
小于y
返回负数,x
等于y
返回 0,x
大于y
返回正数。
通过将 x
和 y
都加上 MIN_VALUE
,我们把它们从有符号数空间映射到无符号数空间,然后使用现有的 compare()
方法来比较它们。加上 MIN_VALUE
的这一步确保了两个数都按照无符号整数的逻辑进行比较。
工作示例:
-
输入:
x = -1
,y = 1
(在有符号表示中,-1 比 1 小)转换:
x + MIN_VALUE = -1 + (-2147483648) = 2147483647
和y + MIN_VALUE = 1 + (-2147483648) = -2147483647
比较:
2147483647
比-2147483647
大,因此无符号情况下x > y
。
总结:
- 目的:
compareUnsigned
是为了实现无符号整数的比较。 - 原理: 通过将两个整数加上
MIN_VALUE
,将它们从有符号空间映射到无符号整数空间,然后用已有的compare
方法进行比较。
decode
方法的作用:
- 参数:
String nm
—— 一个表示数字的字符串,可能带有进制前缀(例如,0x
表示十六进制,0
表示八进制)。 - 返回: 返回解析后的
Integer
对象。 - 异常: 如果传入的字符串格式不正确,则抛出
NumberFormatException
异常。
支持的输入格式:
- 十进制(decimal): 普通的数字字符串,例如
"123"
,"456"
. - 十六进制(hexadecimal): 以
"0x"
或"0X"
开头的字符串,例如"0x1A"
,"0XFF"
. - 八进制(octal): 以
"0"
开头的字符串,例如"012"
(解释为八进制,等于十进制的10
)。 - 负数: 负数字符串也被支持,例如
"-0x1F"
(解释为十六进制的负数)或"-077"
(八进制负数)。
getInteger(String nm, Integer val)
方法的主要作用是从系统属性中获取指定名称的属性值,并将其解析为一个 Integer
对象。如果指定的系统属性不存在或无法解析为整数,则返回一个默认值 val
。
方法的作用场景:
- 读取系统属性:
- 系统属性(System Properties)通常是在Java程序启动时通过命令行参数或者运行时环境变量设置的。通过
System.getProperty(String)
方法,开发者可以获取这些属性,getInteger()
扩展了这个功能,将这些属性值解析为整数。
- 系统属性(System Properties)通常是在Java程序启动时通过命令行参数或者运行时环境变量设置的。通过
- 处理可能缺失或格式不正确的系统属性:
- 该方法提供了一个健壮的机制:如果指定的系统属性不存在、属性值为空、格式不正确(如不能被解析为数字),则返回用户指定的默认值。这在开发时非常有用,因为系统属性可能因不同的运行环境或启动配置而有所不同。
适用的场景举例:
-
配置和调优:
- 在企业级应用中,许多配置(如线程池大小、连接超时、缓存大小等)会通过系统属性设置。开发者可以使用
getInteger()
来读取这些配置,并为每个属性提供一个合理的默认值,以确保在没有明确配置的情况下程序依然能运行。
java 复制代码 // 例如,从系统属性获取线程池大小,默认值为10 int threadPoolSize = getInteger("thread.pool.size", 10);
- 在企业级应用中,许多配置(如线程池大小、连接超时、缓存大小等)会通过系统属性设置。开发者可以使用
-
命令行参数传递:
- 一些Java应用程序可能在启动时通过命令行参数(如
Dproperty=value
)传递系统属性。getInteger()
可以从这些命令行参数中获取并解析整数值。
bash 复制代码 java -Dmax.connections=100 MyApplication
在代码中可以使用:
java 复制代码 int maxConnections = getInteger("max.connections", 50); // 如果没有设置,默认为50
- 一些Java应用程序可能在启动时通过命令行参数(如
-
跨平台或环境配置:
- 在不同环境(如开发、测试、生产)中,程序可能需要根据运行环境来调整行为。可以通过系统属性配置不同的参数,而不需要硬编码这些值。
java 复制代码 // 根据系统属性决定是否启用调试模式 int debugLevel = getInteger("debug.level", 0); // 默认不启用调试模式
-
系统配置检查:
- 这个方法可以用来检查Java环境或系统的配置(如最大内存、线程数等),并确保值在可接受的范围内。例如,在启动时可以通过系统属性传递硬件限制参数。
具体行为说明:
- 参数
nm
是要读取的系统属性的名称。 - 参数
val
是默认值,当没有找到该系统属性或值不能正确解析为整数时,返回此默认值。 System.getProperty(nm)
用于获取名为nm
的系统属性。如果没有找到该属性,返回null
。Integer.decode(v)
尝试将字符串v
解析为整数。如果字符串是以0x
、0X
或#
开头的,则解析为十六进制整数;如果以0
开头,则解析为八进制;否则按十进制解析。
错误处理:
- 如果
nm
为空、系统属性名无效,或属性值格式错误(不能被解析为整数),会抛出IllegalArgumentException
、NullPointerException
或NumberFormatException
。这些异常在方法内部被捕获,确保调用该方法时程序不会崩溃,且可以返回指定的默认值。
总结:
getInteger(String nm, Integer val)
是一个从系统属性中读取整数值的工具方法,它处理了可能出现的异常情况,并提供了默认值机制。这个方法适用于需要从系统属性中读取配置值,且保证系统属性缺失或不正确时不会影响程序正常运行的场景。
- 进制转化
toBinaryString
:转为二进制字符串
toOctalString
:转为八进制字符串
toHexString
:转为16进制字符串
2. numberOfLeadingZeros(int i)
:计算前导零的个数
`numberOfTrailingZeros(int i)`:计算尾随零的个数
reverse(int i)
方法的作用是将一个整数i
的 二进制位顺序反转,即将其二进制表示的位从左到右完全反转。最终返回的结果是原始整数的位顺序被颠倒后的新整数。
相关文章:

Integer 源码记录
Integer 公共方法结构 注意: 通过构造函数创建一个Integer对象,每次都会返回一个新的对象,如果使用 进行对象的比较,那么结果是false。 public Integer(int value) {this.value value;}与之对应的是,valueOf 方法…...

【RocketMQ】一、基本概念
文章目录 1、举例2、MQ异步通信3、背景4、Rocket MQ 角色概述4.1 主题4.2 队列4.3 消息4.4 生产者4.5 消费者分组4.6 消费者4.7 订阅关系 5、消息传输模型5.1 点对点模型5.2 发布订阅模型 1、举例 以坐火车类比MQ: 安检大厅就像是一个系统的门面,接受来…...
笔记9.18
线程之间的通信是指在多线程程序中,不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式: 共享内存: 这是最直接的方式,多个线程通过读写同一块内存区域࿰…...

时间序列8个基准Baseline模型及其详细解读
我是从去年11月份开始,选定时间序列预测这个方向,准备在工作之余继续独立进行一些科学研究。选定这个方向是因为我对金融量化一直挺感兴趣,希望能把时间序列中的深度学习算法模型,用到金融数据。现在看来,我太过于理想…...
将相机深度图转接为点云的ROS2功能包
depth_image_proc 是一个 ROS(Robot Operating System)包,它包含了一系列节点,用于处理来自深度相机的图像数据,并将其转换为点云。以下是 depth_image_proc 包中各个节点的作用: convert_metric_node&…...

计算机毕业设计选题推荐-共享图书管理系统-小程序/App
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

架构师:在 Spring Cloud 中实现全局异常处理的技术指南
1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…...

es由一个集群迁移到另外一个集群es的数据迁移
迁移es的数据 改下index的索引 就可以了。 查询 用curl -u就可以查询了...

java项目之常规应急物资管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 基于SpringBootVue的…...

text2sql方法:RESDSQL和DAIL-SQL
之前介绍了text2sql的综述,但是对一些方法的描述不够详细,所以将一些感兴趣的方法思路也整理一下。 RESDSQL RESDSQL出自2023年2月的论文《RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL》(github)。它使用seq2seq PLM(pr…...

Stable Diffusion 优秀博客转载
初版论文地址:https://arxiv.org/pdf/2112.10752 主要流程图: Latent Diffusion Models(LDMs) DDPM是"Denoising Diffusion Probabilistic Models"的缩写, 去噪扩散概率模型 博客: 【论文阅读…...
探索IT行业的无限潜力:技术、发展与职业前景
探索IT行业的无限潜力:技术、发展与职业前景 1. 引言 信息技术(IT)已经彻底改变了我们的生活方式,从智能手机到云计算,IT无处不在。无论是公司管理系统、社交媒体,还是大数据分析平台,IT推动了…...
ESP32配网接入Wifi
1 ESP32的两种模式 AP模式:ESP32可以作为热点,手机和电脑等设备接入使用。 STA模式:ESP32可以作为作为客户端接入其他网络中。 2 流程 step1: ESP32上电后进入STA模式,尝试看能够接入网络 step2: 如何连接成功,则正常运行。如何连接超时,则自动进入AP模式,设置AP热点…...

前端-js例子:收钱转账
支付宝转账 在这里用到周期定时器setInterval(function,time),设置达到目标钱数时停止定时器。 点击转账按钮时,开始函数显示。 同时要确定输入框里输入的是数字。(有一定容错) window.onloadfunction(){var btn document.que…...

2024 BaseCTF repwn 部分wp
You are good at IDA 附件拖入ida。比较简单 UPX mini upx壳,无魔改,直接脱。脱完拖入ida。比较简单 Ez Xor 附件拖入ida 比较简单。脚本 ez_maze 附件拖入ida 一个宽为15的迷宫 BasePlus 附件拖入ida。变表base64再异或0xE 签个到吧 nc连上即得 echo nc…...

每日学习一个数据结构-倒排表
文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表(Inverted Index),也称为反向索引或倒排文件,在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词,并找到包含…...

828华为云征文|部署在线文件管理器 Spacedrive
828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…...
Alluxio EnterpriseAI on K8s 部署教程
Alluxio Enterprise AI on K8s 部署视频教程 视频为Alluxio Enterprise AI on K8s 部署视频教程。下面内容将主要介绍如何通过 Operator(Kubernetes 管理应用程序的扩展)在 Kubernetes 上安装 Alluxio。 1. 系统要求 Kubernetes 至少1.19版本的 Kubern…...

鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发
基本概念 在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF加载方案,方便拓展算法生态。LiteOS-M提供类…...
Leetcode42. 接雨水
讲的好的视频讲解 【很难想象这up刷题的精神状态 Leetcode42. 接雨水】 https://www.bilibili.com/video/BV1MC411n7Af/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a rm是right max的意思,lm是left max的意思 时间复杂度: O (…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...