当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA中Integer值的范围实例代码

JAVA中Integer值的范围实例代码

2019年07月19日  | 移动技术网IT编程  | 我要评论
废话不多说了,直接给大家贴代码,具体代码如下所示: package com.test; public class test { public static

废话不多说了,直接给大家贴代码,具体代码如下所示:

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值的范围实例代码,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网