java bigint范围_Java Integer取值范围

java bigint范围_Java Integer取值范围packagecom test publicclassT publicstatic String args Integera 100 此处若使用 new 则 值必为 falseInteger 100 System out println a b trueIntegerc 150 Integerd 150 System

package com.test;

public class Test {

public static void main(String []args) {

Integer a = 100;//此处若使用new,则==值必为false

Integer b = 100;

System.out.println(a==b);//true

Integer c = 150;

Integer d = 150;

System.out.println(c==d);//false

}

}

打印结果很显然。

但是如果换成 128 > var >= -128 之外的整数就打false了。

这是什么原因呢?

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

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

3。在jdk源码中

。。。

819b222e5822112c419bda54ef70ac8d.png

public static Integer valueOf(int i) {

final int offset = 128;

if (i >= -128 && i <= 127) { // must cache

return IntegerCache.cache[i + offset]; //符合值范围时候,进入也创建好的静态IntergerCache,i+offset的值表示去取cache数组中那个下标的值

}

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

}

。。。

。。。

86174b68d85deebfbc97f835ba8447b8.png

private static class IntegerCache {

private IntegerCache(){}

static final Integer cache[] = new Integer[-(-128) + 127 + 1]; //开辟-128到127的内存区。有0的位置哦

static {

for(int i = 0; i < cache.length; i++)

cache[i] = new Integer(i – 128); //为内存区的数组每个对象赋值

}

}

。。。

这边是java为了提高效率,初始化了-128–127之间的整数对象

所以在赋值在这个范围内都是同一个对象。再加一句

Integer a = 100;

a++;

//这边a++是新创建了一个对象,不是以前的对象。

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

对于127~-128没有多大关系,但是在这范围之外就影响性能了吧,就像StringBuffer VS String一样了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228084.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:51
下一篇 2026年3月16日 下午7:52


相关推荐

  • http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]

    http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]前言:最近写http接口时,有了很多关于接口取参方式的疑问,大家都知道Servlet常用的取参方式有getParameter、getParameterValues、getInputStream(读流形式)。SpringMvc常用的有封装好的@RequestParam,RequestBody。这些取参方式都有什么特点,我都写了测试接口,利用postman做了测试…

    2022年7月22日
    22
  • pytest的使用_调用方法的具体调用格式为

    pytest的使用_调用方法的具体调用格式为Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年7月28日
    8
  • 跨域访问是什么_什么是跨域?怎么解决跨域问题

    跨域访问是什么_什么是跨域?怎么解决跨域问题跨域访问是什么同源策略1995年,同源政策由Netscape公司引人浏览器。目前,所有测览器都实行这个政策。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。随着互联网的发展,“同源政策”越来越严格。目前,如果非同源,共有三种行为受到限制:】Cookie、LocalStorage和IndexDB无法读取DOM无法获得AJAX请求不能发送虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。所谓“同源”指的是“三个相同”:协议相同、域名相同以及端相同。域名是什么

    2022年10月1日
    5
  • 有戏AI + 即梦Seedance 2.0:从剧本到成片,全流程实操教程

    有戏AI + 即梦Seedance 2.0:从剧本到成片,全流程实操教程

    2026年3月13日
    2
  • django使用celery_Django unchained

    django使用celery_Django unchained前言环境celery==5.0.2在安装完celery后,运行celery会报以下错误ModuleNotFoundError:Nomodulenamed'click._bashc

    2022年8月7日
    7
  • GIF录制工具(免安装)

    GIF录制工具(免安装)收集好用的小工具持续更新好用的小工具 尽量为大家提供更多的资源 1 短画面录制为 GIF 使用文章目录收集好用的小工具前言一 ScreenToGif 二 使用方法 1 下载即可使用 2 界面总结前言一 ScreenToGifs 汉化版是一款便捷好用的 gif 动画制作录制软件 二 使用方法 1 下载即可使用 https download csdn net download 界面总结持续更新中

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号