java中INTEGER的取值范围详解

 更新时间:2026年05月30日 14:08:05   作者:FFFXXXFFF  
这段描述主要讨论了Java中`Integer`对象的缓存机制、取值范围及自动箱操作的影响,特别强调了`Integer`对象在常量池中的缓存范围为-1128至到1127之间,并解释了二进制补码存储方式及其在Java中的应用用形式

java中INTEGER的取值范围

public static void main(String[] args) 
	{
		Integer a = new Integer(1);//此处若使用new,则a,b比较==值必为false
		int c = 1;
		Integer b = 1;
 
		System.out.println(a == c); // true
		System.out.println(a == b); // false
		
		Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
		
		System.out.println(f1 == f2); // true
		System.out.println(f3 == f4); // false

为什么(f3 == f4); // false?

public class AutoboxingTest {
 
    public static void main(String args[]) {
 
        // Example 1: == comparison pure primitive – no autoboxing
        int i1 = 1;
        int i2 = 1;
        System.out.println("i1==i2 : " + (i1 == i2)); // true
 
        // Example 2: equality operator mixing object and primitive
        Integer num1 = 1; // autoboxing
        int num2 = 1;
        System.out.println("num1 == num2 : " + (num1 == num2)); // true
 
        // Example 3: special case - arises due to autoboxing in Java
        Integer obj1 = 1; // autoboxing will call Integer.valueOf()
        Integer obj2 = 1; // same call to Integer.valueOf() will return same
                            // cached Object
 
        System.out.println("obj1 == obj2 : " + (obj1 == obj2)); // true
 
        // Example 4: equality operator - pure object comparison
        Integer one = new Integer(1); // no autoboxing
        Integer anotherOne = new Integer(1);
        System.out.println("one == anotherOne : " + (one == anotherOne)); // false
 
    }
 
}
 
Output:
i1==i2 : true
num1 == num2 : true
obj1 == obj2 : true
one == anotherOne : false

值得注意的是第三个小例子,这是一种极端情况。

obj1和obj2的初始化都发生了自动装箱操作。但是处于节省内存的考虑,JVM会缓存-128到127的Integer对象。因为obj1和obj2实际上是同一个对象。所以使用”==“比较返回true。

java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);

比较的时候仍然是对象的比较

当不符合-128 127值范围时候。记住用的:new,开辟新的内存空间,不属于IntergerCache管理区。

public static void main(String []args) {
    Integer a = 100;
    Integer b = a;//此时b指针指向值为100的堆地址  即a的堆地址,a==b成立
    a++;//此时a指向的值发生变化为101,a指针指向101的堆地址。而b任然指向100
    System.out.println(a==b);
}

打印就是false

一个 Integer 类型占 4 字节,一个字节占 8 位二进制码,因此一个 Integer 总共占 32 位二进制码。去除第一位的符号位,剩下 31 位来表示数值。

最小值为 -2^31,最大值为 2^31-1

java中如果Integer不是new出Integer对象,而是直接赋值如:

         Integer b1 = 12;

     Integer b2 = 12;

这种情况是在常量池中开辟出同一个空间来存储12,所以b1和b2都指向12,如下图所示:

接下来说说,Integer的缓冲范围,因为不是在堆区new一个对象,那么在常量池中就必须对其的大小范围做出一个规定,有一个规范叫JSL(Java Language Specification,java语言规范)对**Integer的缓冲做了约束,规定其范围为:(-128-127)**之间

在计算机中,数据是由二进制补码进行存储的,在 Java 代码中我们看到的 “0x80000000”、“0x7fffffff”都是补码的形式,通过转换为原码获取它们的真实值。

转换公式:

  • 当原码为正数的时候,正数的原码、反码、补码都相同。

正数:1

原码:0000 0000 0000 0000 0000 0000 0000 0001

反码:0000 0000 0000 0000 0000 0000 0000 0001

补码:0000 0000 0000 0000 0000 0000 0000 0001

  • 当原码为负数的时候,反码为去除符号位按位取反,补码为去除符号位按位取反再加1。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在springboot3微项目中如何用idea批量创建单元测试逻辑

    在springboot3微项目中如何用idea批量创建单元测试逻辑

    这篇文章主要介绍了在SpringBoot3项目中使用IntelliJIDEA批量创建单元测试包括准备工作(确保项目配置正确,添加测试依赖),使用IntelliJIDEA创建测试,感兴趣的朋友一起看看吧
    2024-10-10
  • 如何实现nohup java进程号一直在变方法步骤详解

    如何实现nohup java进程号一直在变方法步骤详解

    这篇文章主要为大家介绍了如何实现nohup java进程号一直在变方法步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringBoot环境配置知识总结

    SpringBoot环境配置知识总结

    今天带大家了解SpringBoot环境配置的相关知识,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Java无限级树(递归)超实用案例

    Java无限级树(递归)超实用案例

    下面小编就为大家带来一篇Java无限级树(递归)超实用案例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 一起聊聊Java中的自定义异常

    一起聊聊Java中的自定义异常

    在学习Java的过程中,想必大家都一定学习过异常这个篇章,异常的基本特性和使用这里就不再多讲了。本文就来和大家讲讲如何自定义异常
    2022-08-08
  • Spark Maven项目打包后找不到主类问题及解决

    Spark Maven项目打包后找不到主类问题及解决

    在使用IDEA、Maven创建Spark项目时,遇到打包后Scala程序找不到主类的问题,原因是Maven缺少scala-maven-plugin插件,通过添加该插件并重新构建项目,问题得到解决
    2026-02-02
  • Java简单数据加密方法DES实现过程解析

    Java简单数据加密方法DES实现过程解析

    这篇文章主要介绍了Java简单数据加密方法DES实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • idea启动vue项目教程

    idea启动vue项目教程

    文章介绍了在IDEA中安装Node.js和配置Vue.js插件的步骤,,首先,从Node.js官网下载并安装LTS版本;然后,在打开终端验证安装结果;接着,在IDEA中配置Node.js解释器并重启;最后,在配置运行方式,设置Command和Scripts,保存后点击绿色三角启动
    2026-05-05
  • Java创建Excel数据透视表(Pivot Table)的完整实战教程

    Java创建Excel数据透视表(Pivot Table)的完整实战教程

    在日常的数据分析开发中,我们经常需要对大量原始数据进行汇总、分类和统计,本文将介绍如何在 Java 中创建 Excel 数据透视表,并给出一个实用示例,有需要的小伙伴可以了解下
    2026-03-03
  • 浅谈静态变量、成员变量、局部变量三者的区别

    浅谈静态变量、成员变量、局部变量三者的区别

    下面小编就为大家带来一篇浅谈静态变量、成员变量、局部变量三者的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论