java基础-包装类

  • Post author:
  • Post category:java




一。Integer包装类


Integer的最有效使用效率取值范围为-128到127,最大取值到最小取值为-2147483648到2147483647(-231至 230)

  1. 示例1
 public static void main(String[] args) {
        Integer i1 = -128;
        Integer i2 = -128;
        Integer i3 = 127;
        Integer i4 = 127;
        System.out.println(i1==i2);
        System.out.println(i3==i4);
    }

在这里插入图片描述

2.示例2

 public static void main(String[] args) {
        Integer i1 = -129;
        Integer i2 = -129;
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i1==i2);
        System.out.println(i3==i4);
    }

在这里插入图片描述


原因

public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)
      return IntegerCache.cache[i + 128];
    else
      return new Integer(i);
 }
 其中IntegerCache类的实现为:
 private static class IntegerCache {
    static final int high;
    static final Integer cache[];
    static {
      final int low = -128;
      // high value may be configured by property
      int h = 127;
      if (integerCacheHighPropValue != null) {
        // Use Long.decode here to avoid invoking methods that
        // require Integer's autoboxing cache to be initialized
        int i = Long.decode(integerCacheHighPropValue).intValue();
        i = Math.max(i, 127);
        // Maximum array size is Integer.MAX_VALUE
        h = Math.min(i, Integer.MAX_VALUE - -low);
     }
      high = h;
      cache = new Integer[(high - low) + 1];
      int j = low;
      for(int k = 0; k < cache.length; k++)
        cache[k] = new Integer(j++);
   }
    private IntegerCache() {}
 }


总结


从这两段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返

回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象

  1. 示例3
public static void main(String[] args) {

        System.out.println("最大取值:" + Integer.MAX_VALUE);

        System.out.println("最小取值:" + Integer.MIN_VALUE);
    }

在这里插入图片描述

1.超出范围会怎么样

 public static void main(String[] args) {
        System.out.println(1);
        // toBinaryString 返回int变量的二进制表示的字符串
        System.out.println(Integer.toBinaryString(1));

        System.out.println("-----------");
        //左移运算<<,将二进制向左移动一位,即数值乘以2。
        System.out.println(1 << 1);

        System.out.println(Integer.toBinaryString(1 << 1));

    }

在这里插入图片描述

public static void main(String[] args) {

        //已知Integer的二进制是32位,那么当1左移31位时达到最高位,即Integer的最小值
        System.out.println(Integer.toBinaryString(1 << 31));

        System.out.println(1 << 31);

        System.out.println(Integer.MIN_VALUE);

    }

在这里插入图片描述

继续左移动一位

public static void main(String[] args) {
        //继续左移动1位
        System.out.println(Integer.toBinaryString(1 << 32));
        System.out.println(1 << 32);

    }

在这里插入图片描述


总结


当范围达到最大范围时,在高位产生溢出,溢出时返回最低位,从最低位重新开始。可以理解为一个循环。最高位的下一位就是最低位,即第31位之后是第0为,1现在在第31位上,再向左移1位,回到第0位上,即回到十进制的1。同理向下溢出也是一样的。



二。Double包装类

  1. 示例1
public class Main {
  public static void main(String[] args) {
   
    Double i1 = 100.0;
    Double i2 = 100.0;
    Double i3 = 200.0;
    Double i4 = 200.0;
   
    System.out.println(i1==i2);
    System.out.println(i3==i4);
 }
}

结果:

在这里插入图片描述

总结; 在某个范围内的整型数值的个数是有限的,而浮点数却不是。



版权声明:本文为weixin_49076592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。