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源码中
。。。

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管理区

。。。

。。。

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一样了

Java Integer值范围问题相关推荐

  1. java Integer值比较

    所有相同类型的包装类对象之间的值比较,应该使用equals方法比较. –来自阿里巴巴java开发手册. 先看个简单实例: public static void main(String[] args)t ...

  2. java integer 值传递_在java中String,对象,Integer(包装类型的)关于引用传递仍是值传递...

    场景: 你们都知道基本的数据类型,int,float等等这种是按值传递的.可是对于String,对象,Integer是怎样传递呢?java 原理知识: 若是参数类型是原始类型,那么传过来的就是这个参数 ...

  3. JAVA Integer值比较问题

    文章目录 1.概述 1.概述 今天项目中很多地方用Integer比较 实体类中 private Integer entityId; 然后比较 basEntityInDb.getEntityId() = ...

  4. Java Integer取值范围是多少呢?

    转自: Java Integer取值范围是多少呢? 下文笔者将使用实验的方式,讲述Integer类的取值范围,如下所示: Integer同int类型取值一致其取值范围是从-2147483648 至 2 ...

  5. java integer的范围_java integer的取值范围是什么?

    Java Integer取值范围 Integer类取值和 int 类型取值一致,取值范围是从-2147483648 至 2147483647 ,包括-2147483648 和 2147483647. ...

  6. java integer int 比较_java Integer和int之间的比较问题是什么?

    展开全部 java Integer和int之间e68a84e8a2ad3231313335323631343130323136353331333365633864==的比较问题.求解释 public ...

  7. 【java】java Integer 缓存 一定是 -128~127 吗

    1.概述 我们都知道 java Integer是有缓存的,缓存范围是 -128~127.但是这个值是一定的吗? 不一定.看源码.缓存大小居然可以改变 /*** Cache to support the ...

  8. 享元模式在 Java Integer 中的应用

    我们先来看下面这样一段代码.你可以先思考下,这段代码会输出什么样的结果. Integer i1 = 56; Integer i2 = 56; Integer i3 = 129; Integer i4 ...

  9. java integer long 转换_java - 将Integer转换为Long

    java - 将Integer转换为Long 我需要使用反射来获取字段的值. 碰巧我并不总是确定该字段的数据类型是什么. 为此,为了避免一些代码重复,我创建了以下方法: @SuppressWarnin ...

最新文章

  1. Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100
  2. Unity热更新技术整理
  3. Boost:基于Boost的阻塞udp回显服务器
  4. c++primer书上习题date类的部分源代码(待整理)
  5. 蛋白粉有什么作用?搭配这些食物帮助提升免疫力!
  6. tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手
  7. Linux内核构建与开发
  8. BZOJ2879 [Noi2012]美食节
  9. jsarraybufferdaya释放_聊聊JS的二进制家族:Blob、ArrayBuffer和Buffer
  10. 概率算法(随机化算法)
  11. cad抛物线曲线lisp_cad画缓和曲线lisp程序(1)
  12. 视频剪辑的方法,视频裂变
  13. 小布助手对话短文本语义匹配
  14. HTTPS之SNI介绍与Nginx多域名支持
  15. 快乐二级域名分发程序-美化版源码
  16. android 阅读模式吗,在Android或iOS上使用阅读模式来查看网页 | MOS86
  17. Word设置二级标题的编号后,第二章下的二级标题的编号仍为1.X
  18. 遥控车库门常见故障的处理方法
  19. Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
  20. 基于C#开发一款益智类一笔画小游戏

热门文章

  1. “万年老大难” - 沟通与协调
  2. 处理大数据的四个步骤
  3. java 查看window系统和linux系统信息
  4. 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现
  5. Navicat如何连接阿里云数据库RDS
  6. python进阶:yield与yield from
  7. python标准库复数运算包cmath
  8. 如何使用Google底部导航栏创建通知徽章
  9. 2021NCTF-RE
  10. 从零开始成为一名合格的数据分析师:为什么必须学统计学?