zoukankan      html  css  js  c++  java
  • Java复习总结——数据类型

    包装类型

    八个基本类型:

    • Boolean/boolean/1
    • Byte/byte/8
    • Character/char/16
    • Short/short/16
    • Integer/int/32
    • Float/float/32
    • Long/long/64
    • Double/double/64
      基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

    Integer x = 2; // 装箱
    int y = x; // 拆箱

    缓冲池

    new Integer(123)与Integer.valueOf(123)的区别在于:

    • new Integer(123)每次都会新建一个对象
    • Integer.valueOf(123)会使用缓存池中的对象,多次调用会取得同一个对象的引用。
    Integer x = new Integer(123);
    Integer y = new Integer(123);
    System.out.println(x == y);  // false
    Integer z = Integer.valueOf(123);
    Integer k = Integer.valueOf(123);
    System.out.println(z == k);  // true
    

    valueOf()方法的实现比较简单,就是先判断是否在缓存池中,如果在的话就直接返回缓存池的内容。

    public static Integer valueOf(int i){
      if (i >= IntegerCache.low && i <= IntegerCache.high){
        return IntegerCache.cache[i + (-IntegerCache.low)];
      }
      return new Integer(i);
    }
    

    IntegerCache源码:

    private static class IntegerCache {
            static final int low = -128;
            static final int high;
            static final Integer cache[];
    
            static {
                // high value may be configured by property
                int h = 127;
                String integerCacheHighPropValue =
                    sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
                if (integerCacheHighPropValue != null) {
                    try {
                        int i = parseInt(integerCacheHighPropValue);
                        i = Math.max(i, 127);
                        // Maximum array size is Integer.MAX_VALUE
                        h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                    } catch( NumberFormatException nfe) {
                        // If the property cannot be parsed into an int, ignore it.
                    }
                }
                high = h;
    
                cache = new Integer[(high - low) + 1];
                int j = low;
                for(int k = 0; k < cache.length; k++)
                    cache[k] = new Integer(j++);
    
                // range [-128, 127] must be interned (JLS7 5.1.7)
                assert IntegerCache.high >= 127;
            }
    
            private IntegerCache() {}
        }
    
  • 相关阅读:
    练习:给Keras ResNet50源码加上正则化参数, 修改激活函数为Elu
    凸集,凸函数,凸优化问题。
    Keras用动态数据生成器(DataGenerator)和fitgenerator动态训练模型
    Lagrangian 对偶 和 Slater 条件
    凸集分离定理
    Python 中的 sorted 和 sort的区别
    工作反思
    jemalloc
    libcoap
    dropbear
  • 原文地址:https://www.cnblogs.com/Tu9oh0st/p/10714261.html
Copyright © 2011-2022 走看看