Integer 源码记录

news2024/12/24 2:58:21

Integer

公共方法结构

在这里插入图片描述

注意:

  1. 通过构造函数创建一个Integer对象,每次都会返回一个新的对象,如果使用 == 进行对象的比较,那么结果是false。
public Integer(int value) {
        this.value = value;
    }
  1. 与之对应的是,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);
    }
  1. 在平时的开发过程中,对于 Integer 等包装类进行 相等比较 时,使用 equals 方法
  2. public static int parseInt(String s, int radix)方法 radix 参数,将x进制 转为 10进制
  3. compareUnsigned 方法的作用是比较两个整数 xy,将它们作为无符号整数进行比较。虽然Java中没有直接的无符号整数类型,但可以通过位操作或加上一个固定偏移量的方式,间接实现无符号整数的比较。

代码解释:

java
复制代码
public static int compareUnsigned(int x, int y) {
    return compare(x + MIN_VALUE, y + MIN_VALUE);
}

1. 无符号整数比较的背景:

在Java中,int类型是32位有符号整数,数值范围是从 -2^312^31 - 1(即从 -21474836482147483647)。当我们使用compare(int x, int y)方法时,它会进行有符号整数比较,正数总是比负数大。但有时候我们需要像无符号整数一样对两个整数进行比较,也就是不区分正负号。

2. MIN_VALUE的作用:

Integer.MIN_VALUE-2147483648。在无符号比较中,通过对每个数加上 MIN_VALUE,我们可以把原本范围为 -2^312^31 - 1 的有符号整数映射到 02^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 返回正数。

通过将 xy 都加上 MIN_VALUE,我们把它们从有符号数空间映射到无符号数空间,然后使用现有的 compare() 方法来比较它们。加上 MIN_VALUE 的这一步确保了两个数都按照无符号整数的逻辑进行比较。

工作示例:

  • 输入: x = -1y = 1 (在有符号表示中,-1 比 1 小)

    转换: x + MIN_VALUE = -1 + (-2147483648) = 2147483647y + 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

方法的作用场景:

  1. 读取系统属性:
    • 系统属性(System Properties)通常是在Java程序启动时通过命令行参数或者运行时环境变量设置的。通过System.getProperty(String)方法,开发者可以获取这些属性,getInteger() 扩展了这个功能,将这些属性值解析为整数。
  2. 处理可能缺失或格式不正确的系统属性:
    • 该方法提供了一个健壮的机制:如果指定的系统属性不存在、属性值为空、格式不正确(如不能被解析为数字),则返回用户指定的默认值。这在开发时非常有用,因为系统属性可能因不同的运行环境或启动配置而有所不同。

适用的场景举例:

  1. 配置和调优:

    • 在企业级应用中,许多配置(如线程池大小、连接超时、缓存大小等)会通过系统属性设置。开发者可以使用 getInteger() 来读取这些配置,并为每个属性提供一个合理的默认值,以确保在没有明确配置的情况下程序依然能运行。
    java
    复制代码
    // 例如,从系统属性获取线程池大小,默认值为10
    int threadPoolSize = getInteger("thread.pool.size", 10);
    
    
  2. 命令行参数传递:

    • 一些Java应用程序可能在启动时通过命令行参数(如 Dproperty=value)传递系统属性。getInteger() 可以从这些命令行参数中获取并解析整数值。
    bash
    复制代码
    java -Dmax.connections=100 MyApplication
    
    

    在代码中可以使用:

    java
    复制代码
    int maxConnections = getInteger("max.connections", 50);  // 如果没有设置,默认为50
    
    
  3. 跨平台或环境配置:

    • 在不同环境(如开发、测试、生产)中,程序可能需要根据运行环境来调整行为。可以通过系统属性配置不同的参数,而不需要硬编码这些值。
    java
    复制代码
    // 根据系统属性决定是否启用调试模式
    int debugLevel = getInteger("debug.level", 0); // 默认不启用调试模式
    
    
  4. 系统配置检查:

    • 这个方法可以用来检查Java环境或系统的配置(如最大内存、线程数等),并确保值在可接受的范围内。例如,在启动时可以通过系统属性传递硬件限制参数。

具体行为说明:

  • 参数 nm 是要读取的系统属性的名称。
  • 参数 val 是默认值,当没有找到该系统属性或值不能正确解析为整数时,返回此默认值。
  • System.getProperty(nm) 用于获取名为 nm 的系统属性。如果没有找到该属性,返回 null
  • Integer.decode(v) 尝试将字符串 v 解析为整数。如果字符串是以 0x0X# 开头的,则解析为十六进制整数;如果以 0 开头,则解析为八进制;否则按十进制解析。

错误处理:

  • 如果 nm 为空、系统属性名无效,或属性值格式错误(不能被解析为整数),会抛出 IllegalArgumentExceptionNullPointerExceptionNumberFormatException。这些异常在方法内部被捕获,确保调用该方法时程序不会崩溃,且可以返回指定的默认值。

总结:

getInteger(String nm, Integer val) 是一个从系统属性中读取整数值的工具方法,它处理了可能出现的异常情况,并提供了默认值机制。这个方法适用于需要从系统属性中读取配置值,且保证系统属性缺失或不正确时不会影响程序正常运行的场景。

  1. 进制转化

toBinaryString:转为二进制字符串

toOctalString:转为八进制字符串

toHexString:转为16进制字符串
2. numberOfLeadingZeros(int i):计算前导零的个数

`numberOfTrailingZeros(int i)`:计算尾随零的个数
  1. reverse(int i) 方法的作用是将一个整数 i二进制位顺序反转,即将其二进制表示的位从左到右完全反转。最终返回的结果是原始整数的位顺序被颠倒后的新整数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java -----泛型

泛型的理解和好处 泛型是在JDK5之后引入的一个新特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 泛型的格式为 <数据类型> import java.util.ArrayList;SuppressWarnings({"all"}) public class Generic02 {public static void…

WGS1984快速度确定平面坐标系UTM分带(快速套表、公式计算、软件范围判定)

之前我们介绍了坐标系3带6带快速确定带号及中央经线&#xff08;快速套表、公式计算、软件范围判定&#xff09;就&#xff0c;讲的是CGCS2000 高斯克吕格的投影坐标系。 那还有我们经常用的WGS1984的平面坐标系一般用什么投影呢? 对于全球全国的比如在线地图使用&#xff1a…

探索GraphRAG:用yfiles-jupyter-graphs将知识库可视化!

yfiles-jupyter-graphs 可视化 GraphRAG 结构 前言 前面我们通过 GraphRag 命令生成了知识库文件 parquet&#xff0c;这节我们看一下如何使用 yfiles-jupyter-graphs 添加 parquet 文件的交互式图形可视化以及如何可视化 graphrag 查询的结果。 yfiles-jupyter-graphs 是一…

前端-js例子:收钱转账

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

vue3 + ts + pnpm:nprogress / 页面顶部进度条

一、简介 nprogress 是一个轻量级的进度条库&#xff0c;它适用于在网页上添加顶部进度条&#xff0c;用于指示页面加载进度或任何长时间的运行过程。这个库非常流行&#xff0c;因为它易于使用且视觉效果很好。 二、安装 pnpm add nprogress 三、在使用的页面引入 / src/v…

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

ECharts基础使用方法 ---vue

1.安装依赖文件 仔细看项目" README.md " 描述&#xff0c;确定用什么安装 npm npm install echarts --save //官网推荐使用 pnpm pnpm install echarts --save 其他也是 在项目根目录&#xff0c;打开当前目录命令控制栏&#xff0c;输入以上命令并运行 安装成功后…

动动手指探索世界,旅游APP如何定制开发?

旅游APP的出现为旅行带来了许多便利。随着移动互联网的发展&#xff0c;旅游行业也在不断寻求创新与变革。旅游APP为游客提供了更加便捷的旅行体验&#xff0c;通过旅游APP&#xff0c;用户可以了解旅游信息、旅游服务、在线咨询等&#xff0c;实现在线一站式解决旅行需求的目标…

Github 2024-09-23 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-09-23统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6C++项目3C项目3HTML项目2PowerShell项目1TypeScript项目1JavaScript项目1Blade项目1PHP项目1Bootstrap 5: Web上开发响应式、移动优…

【文心智能体】 旅游手绘手帐 开发分享 零代码 手绘风景 记录行程和心情 旅游攻略

旅游手绘手帐&#xff0c;点击文心智能体平台AgentBuilder | 想象即现实 (baidu.com) 目录 背景 创作灵感 开发历程 一、基础配置 二、高级配置 三、引导示例&#xff08;提示词&#xff09; 期待优化 背景 这个智能体是一个零代码智能体&#xff08;文心智能体平台现…

MySQL篇(管理工具)

目录 一、系统数据库 二、常用工具 1. mysql 2. mysqladmin 3. mysqlbinlog 4. mysqlshow 5. mysqldump 6. mysqlimport/source 6.1 mysqlimport 6.2 source 一、系统数据库 MySQL数据库安装完成后&#xff0c;自带了一下四个数据库&#xff0c;具体作用如下&#xf…

JDBC和一下重要的jar包,分层结构

系列文章目录 JDBC和方便使用的jar包 目录 系列文章目录 文章目录 一、JDBC 1.步骤 2.SQL注入 3.SQL注入解决&#xff08;PreparedStatement&#xff09; 4.批处理和事务控制 5.连接池 Druid连接池&#xff08;德鲁伊&#xff09; 6.封装为工具类 7.ThreadLocal 、小秘书 二、…

大语言模型(LLM)入门学习路线图

Github项目上有一个大语言模型学习路线笔记&#xff0c;它全面涵盖了大语言模型的所需的基础知识学习&#xff0c;LLM前沿算法和架构&#xff0c;以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份…

【FPGA】FPGA芯片结构

目录 1 可编程输出/输出单元&#xff08;IOB&#xff09;2 可配置逻辑块&#xff08;CLB&#xff09;3 数字时钟管理模块&#xff08;DCM&#xff09;4 嵌入式块存储器&#xff08;BRAM&#xff09;5 布线资源6 内嵌功能模块&#xff08;专用IP单元&#xff09;6.1 PLL&#xf…

SpringBoot简易商品管理系统

> 这是一个基于SpringBootThymeleaf实现的简易商品管理系统。 > 包含基本的登录/注册与商品管理功能。 > 界面简洁美观&#xff0c;代码结构清晰&#xff0c;适用于JAVA初学者在此基础上进行二次开发。 一、项目演示 二、技术框架 框架描述Spring Boot容器管理 S…

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略

CV之OCR&#xff1a;GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略 目录 GOT-OCR2.0的简介 1、更新 GOT-OCR2.0的安装和使用方法 1、安装 安装环境cuda11.8torch2.0.1 安装包 安装Flash-Attention GOT权重&#xff1a;1.43G 2、演示 3、训练 4、评估 GOT-…

Tomcat靶场攻略

一.CVE-2017-12615 1.首页抓包&#xff0c;修改为 PUT 方式提交 ,将jsp木马写到数据包中 2.哥斯拉默认秘钥连接 二.后台弱⼝令部署war包 1.制作WAR包,上传 将JSP⽊⻢压缩为ZIP格式&#xff0c;然后修改后缀为war 2.文件上传成功后&#xff0c;默认会在网站根目录下生成和wa…

使用centos7搭建wiki论坛,使用nginx网站来搭建wiki负载均衡,反向代理。

1.安装一个wget&#xff0c;进入目录opt下 #安装wget yum -y install wget#进入目录/opt/下面 cd /opt/2.获取 mysql8.0 rpm包,安装mysql8.0,安装mysql-server&#xff0c;yum会自动下载所需安装及依赖包. #获取 mysql8.0 rpm包 wget https://dev.mysql.com/get/mysql80-comm…

2024人工智能结课作业-DFS/BFS/Astar解决数码问题

1 深度优先遍历搜索(DFS) 1.1算法介绍 深度优先搜索算法&#xff08;Depth-First-Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。当节点v的所在边都己被探寻过&#xff0c;搜索将回溯到发…

基于SSM的“在线CRM管理系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线CRM管理系统”的设计与实现&#xff08;源码数据库文档开题报告) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能模块图 登录页面 后台管理页面 产品信息页面 客…