原文出处:http://hi.baidu.com/eduask%C9%BD%C8%AA/blog/item/227bf4d81c71ebf538012f53.html

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
}
}

  这是什么原因呢?
  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
}

 

JAVA Integer值的范围的更多相关文章

  1. Java Integer值用==和equals相等问题

    来自 http://blog.csdn.net/w112736112736/article/details/77986283

  2. Java Integer(-128~127)值的==和equals比较产生的思考

    最近在项目中遇到一个问题,两个值相同的Integer型值进行==比较时,发现Integer其中的一些奥秘,顺便也复习一下==和equals的区别,先通过Damo代码解释如下: System.out.p ...

  3. java的值传递笔记

    1. 背景:开发小伙伴突然问我java是值传递还是引用传递,我说当然是值传递,只不过有时候传递一个对象时实际传递的是对象的地址值,所以让人容易产生一种引用传递的假象,貌似在李刚的疯狂java讲义有提到 ...

  4. 问题-MyBatis不识别Integer值为0的数据

    问题-MyBatis不识别Integer值为0的数据 问题:使用MyBatis的过程中,发现一个值为0的数据,Mybatis所识别,最后定位才发现,是自己的写法有问题, <if test=&qu ...

  5. java integer对象判断两个数字是否相等

    java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...

  6. java --Integer 学习

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 在网上看到一个面试题,没有完全做, 本代码基于JDK8 //下面代码运行结果是 public class ...

  7. Java Integer Cache

    Java Integer Cache Java 代码 public class IntegerDemo { public static void main(String[] args) { Integ ...

  8. Java只有值传递(Java值传递还是引用传递?)

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10830521.html 一:区分Java数据类型.变量类型 Java数据类型分两种:基本数据类型.引用类型. ...

  9. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

随机推荐

  1. Android recycleview item水波纹效果

    item的xml 根标签下添加如下三个属性 android:clickable="true" android:focusable="true" android: ...

  2. linux 上zookeeper安装

    一.zookeeper 的安装及配置 .Zookeeper下载 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zooke ...

  3. vue实现tab选项卡切换

    上代码: <template>   <div class="push">     //点击按钮     <div class="tab&qu ...

  4. aclocal-1.13: command not found

    原因: 将编译好的工程拷贝到系统版本不一样的系统中,再进行编译会出现此类问题. 解决方法: yum install automake autoconf yum install libtool auto ...

  5. AI入门:人工神经网络理解及BP神经网络

    本人是个菜鸟,对于机器学习还没入门,但是我去看到了一个作者写的文章,个人感觉是神经网络入门的好帮手,在此推荐给大家,支持原著! https://baijiahao.baidu.com/s?id=160 ...

  6. Python爬虫之爬取站内所有图片

    title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...

  7. SQL热备原理

  8. 复习break、continue、while、do-while的运用

    一.复习: 循环.反复执行某段语句一种语法形式. 1.基本语法: for( 初始条件 ; 循环条件 ; 状态的改变 ) { 循环体 } 循环的四要素. 循环的执行过程.初始条件--循环条件--循环体- ...

  9. LeetCode No.70,71,72

    No.70 ClimbStairs 爬楼梯 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. ...

  10. Python之循环条件、变量、字符串格式化

    一.认识python python语言的优缺点,自行百度,这里不概述,简单说下,python是一门面向对象,解释型计算机语言.那么问题来了,解释型和编译型语言有什么区别? 1.解释型和编译型语言区别 ...