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

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

public class AutoboxingTest {public static void main(String args[]) {// Example 1: == comparison pure primitive – no autoboxingint i1 = 1;int i2 = 1;System.out.println("i1==i2 : " + (i1 == i2)); // true// Example 2: equality operator mixing object and primitiveInteger num1 = 1; // autoboxingint num2 = 1;System.out.println("num1 == num2 : " + (num1 == num2)); // true// Example 3: special case - arises due to autoboxing in JavaInteger obj1 = 1; // autoboxing will call Integer.valueOf()Integer obj2 = 1; // same call to Integer.valueOf() will return same// cached ObjectSystem.out.println("obj1 == obj2 : " + (obj1 == obj2)); // true// Example 4: equality operator - pure object comparisonInteger one = new Integer(1); // no autoboxingInteger 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);
2。比较的时候仍然是对象的比较
当不符合-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任然指向100System.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。

java中INTEGER的取值范围相关推荐

  1. Java|Java中int的取值范围是多少

    Java 中 int 的取值范围是:-2^31 ~ 2^31-1 大致想一下,int 占 4字节,也就是 32 位,int 是有符号的,最高位为符号位.所以剩下31个位置. 那么我们大胆猜测一下,最大 ...

  2. Java中int的取值范围

    先上代码,通过下面代码的执行结果观察 public class Test {public static void main(String[] args) {// 2的31次方int j = (int) ...

  3. Java中数据类型的取值范围

    整数数据类型的取值范围 我们都知道计算机的底层是二进制,也知道不同的整数类型存储值的范围不同,可这些数值在计算机底层是怎样存储的呢?数值范围又是怎么计算出来的呢? 下面以java来进行举例: byte ...

  4. java中random方法取值范围_Java中的Random()函数

    今天在做Java练习的时候注意到了Java里面的一个随机函数--Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结: Java中存在 ...

  5. java中random方法取值范围_java中最值的求法,你可能忽略了这种方法了!

    对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识.在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现.下面以求最大值为例,解释一下多种算法. 自行实 ...

  6. Java中int的取值范围的原因

    为什么Java中int型数据取值范围是[-231, 231-1] 为什么Java中int型数据取值范围是[-231,231-1],网上很多解释都存在问题. int是Java中的8种基本类型之一,一个i ...

  7. java中int的取值范围是多少

    最近在看算法书的时候发现一个非常有意思的现象,在java中输入: System.out.println(Math.abs(-2147483648)); 输出为:-2147483648 针对这个问题,我 ...

  8. java中 byte 取值范围_【二进制基础-java中byte的取值范围-推导过程】

    java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: 例如 ...

  9. java中short的取值范围_java中byte、short、int、long、float、double取值范围

    基本类型 1.整数:包含int,short,byte,long 2.浮点型:float,double 3.字符:char 4.布尔:boolean 分析基本数据类型的特点,最大值和最小值. 1. 基本 ...

最新文章

  1. 递归和函数栈与setjmp和longjmp的关系
  2. linux添加匿名用户,vsftpd3.0之匿名用户配置
  3. Linux操作系统用户登录失败次数过多被锁定的解决方法
  4. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单
  5. mysql,gone away, hy000, reconnect,Mysql大sql文件导入
  6. Java黑皮书课后题第7章:7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值
  7. Codeforces Round #131 (Div. 2)------AB
  8. 创建、部署和卸载SharePoint工作流解决方案包(WSP)
  9. 国外计算机专业入门语言,【转自知乎】给想要报考计算机专业学生的一些建议...
  10. eclipse 启动 tomcat : Multiple Contexts have a path of /SOAProject
  11. 王小毛是懒惰了,还是堕落了?
  12. 水氢发动机应该叫氢能发动机、铝水制氢发动机
  13. Markdown基操
  14. 自制win10 PE usb启动盘教程
  15. 租房系统源码(仅供参考)
  16. 看见“信任”,可信计算平台的由来解读(TPM、TCM、TPCM、等保2.0解读)。
  17. FFmpeg —— 12.示例程序(六):视频编码器(YUV编码为H264)
  18. 机器人瓦力有什么西方的风格_机器人瓦力观后感 英文
  19. 《赢在中国》精彩评语
  20. 计算机专业申请phd美国,美国计算机专业博士的申请个人陈述范文

热门文章

  1. 表格标签 table标签 tr标签 单元格间距 单元格居中加粗 表单居中
  2. 基于Python实现情感分析实验
  3. AI Studio学习篇3_《乘风破浪的姐姐》百度百科嘉宾信息爬取与数据分析
  4. 3、mysql索引优化一:Explain关键字分析
  5. php worker是什么意思,php-fpm中worker进程执行流程是什么
  6. 摄像头图像测试1-基本概念
  7. cube-ui—安装
  8. CF786E ALT
  9. linux 脚本中 -le,Linux中编写Shell脚本
  10. 家用便携式制氧机方案介绍