【无标题】

一、包装类

1、基本数据类型和对应的包装类

例如(byte——>>Byte)

2、拆箱和装箱

装箱:新建一个Interger类型对象,将i的值放入对像的某个属性当中

Integer ij = Integer.valueOf(i);

Integer ij = new Integer(i);

拆箱:将Integer 对象中的值取出,放到一个基本的数据类型中

int j = ii.intValue();

3、自动装箱与拆箱

int i=10;

//自动装箱
Integer ii = i;
Integer ij=(Integer)i;

//自动拆箱
int j = ii;
int k = (int)ii;

自动装箱(Autoboxing)是 Java 中的一种自动转换机制,允许将基本数据类型(如 intdouble 等)自动转换为对应的包装类(如 IntegerDouble 等)。这种转换由编译器在编译时自动完成,本质上是调用了包装类的 valueOf() 方法。

触发场景

当基本数据类型出现在需要包装类对象的上下文中时,会自动触发装箱:

  1. 赋值操作:将基本数据类型赋值给包装类变量。
  2. 方法参数:将基本数据类型传递给需要包装类参数的方法。
  3. 集合操作:向泛型集合(如 List<Integer>)中添加基本数据类型。
  4. 返回值:方法返回基本数据类型,但声明的返回类型是包装类。

示例代码

java

运行

// 1. 赋值操作中的装箱
Integer wrapper = 100; // 自动装箱:Integer.valueOf(100)

// 2. 方法参数中的装箱
List<Integer> list = new ArrayList<>();
list.add(200); // 自动装箱:Integer.valueOf(200)

// 3. 返回值中的装箱
public Integer getNumber() {
    return 300; // 自动装箱:Integer.valueOf(300)
}

缓存机制

Java 对部分包装类(如 IntegerByteShortCharacter)提供了缓存机制,默认缓存范围如下:

  • Integer:-128 到 127(可通过 JVM 参数 -XX:AutoBoxCacheMax 调整上限)。
  • 其他包装类ByteShortCharacter(范围为 0~127),Boolean(缓存 TRUE 和 FALSE)。

示例

java

运行

Integer a = 127; // 缓存范围内,使用缓存对象
Integer b = 127; // 复用缓存对象
System.out.println(a == b); // true(引用相同)

Integer c = 128; // 超出缓存范围,创建新对象
Integer d = 128; // 创建另一个新对象
System.out.println(c == d); // false(引用不同)

注意事项

  1. 性能开销
    自动装箱会创建包装类对象,频繁装箱可能导致内存占用增加和垃圾回收压力。

  2. 空指针异常
    包装类对象可能为 null,拆箱时需注意避免 NullPointerException

    java

    运行

    Integer nullable = null;
    int value = nullable; // 运行时抛出 NPE
    
  3. 比较陷阱
    使用 == 比较包装类对象时,比较的是引用而非值。建议使用 equals() 方法比较值。

    java

    运行

    Integer x = 1000;
    Integer y = 1000;
    System.out.println(x == y); // false(引用不同)
    System.out.println(x.equals(y)); // true(值相同)

自动拆箱(Auto-unboxing)是 Java 中的一种自动转换机制,允许将包装类(如 IntegerDouble 等)自动转换为对应的基本数据类型(如 intdouble 等)。这种转换是编译器提供的语法糖,在运行时会被转换为对包装类的 xxxValue() 方法的调用(例如 intValue()doubleValue() 等)。

触发场景

当包装类对象出现在需要基本数据类型的上下文中时,会自动触发拆箱:

  1. 赋值操作:将包装类对象赋值给基本数据类型变量。
  2. 算术运算:包装类对象参与数学运算(如 +-* 等)。
  3. 比较操作:包装类对象与基本数据类型进行比较(如 ==>< 等)。
  4. 方法参数:将包装类对象传递给需要基本数据类型参数的方法。

示例代码

java

运行

Integer wrapper = 100; // 自动装箱:Integer.valueOf(100)

// 1. 赋值操作中的拆箱
int primitive = wrapper; // 自动拆箱:wrapper.intValue()

// 2. 算术运算中的拆箱
int sum = wrapper + 200; // 等价于 wrapper.intValue() + 200

// 3. 比较操作中的拆箱
boolean isEqual = wrapper == 100; // 等价于 wrapper.intValue() == 100

// 4. 方法参数中的拆箱
printNumber(wrapper); // 自动拆箱后传递给方法

// 方法接收基本数据类型参数
public static void printNumber(int num) {
    System.out.println(num);
}

注意事项

  1. 空指针异常(NullPointerException)
    如果包装类对象为 null,自动拆箱时会抛出异常。

    java

    运行

    Integer nullable = null;
    int value = nullable; // 运行时抛出 NullPointerException
    
  2. 缓存机制的影响
    自动装箱时可能会复用缓存对象(如 Integer 缓存 -128~127),但拆箱后比较的是值本身。

    java

    运行

    Integer a = 127;
    Integer b = 127;
    System.out.println(a == b); // true(缓存对象引用相同)
    System.out.println(a > 126); // true(拆箱后比较值)
    
  3. 性能考虑
    频繁的装箱和拆箱会产生额外的对象创建和方法调用,可能影响性能,尤其在循环中需注意。

总结

自动拆箱简化了代码书写,避免了显式调用 xxxValue() 方法,但需注意空指针风险和缓存机制的影响。合理使用包装类与基本数据类型,可以提高代码的安全性和性能。

自动装箱

自动装箱(Autoboxing)是 Java 中的一种自动转换机制,允许将基本数据类型(如 intdouble 等)自动转换为对应的包装类(如 IntegerDouble 等)。这种转换由编译器在编译时自动完成,本质上是调用了包装类的 valueOf() 方法。

触发场景

当基本数据类型出现在需要包装类对象的上下文中时,会自动触发装箱:

  1. 赋值操作:将基本数据类型赋值给包装类变量。
  2. 方法参数:将基本数据类型传递给需要包装类参数的方法。
  3. 集合操作:向泛型集合(如 List<Integer>)中添加基本数据类型。
  4. 返回值:方法返回基本数据类型,但声明的返回类型是包装类。

示例代码

java

运行

// 1. 赋值操作中的装箱
Integer wrapper = 100; // 自动装箱:Integer.valueOf(100)

// 2. 方法参数中的装箱
List<Integer> list = new ArrayList<>();
list.add(200); // 自动装箱:Integer.valueOf(200)

// 3. 返回值中的装箱
public Integer getNumber() {
    return 300; // 自动装箱:Integer.valueOf(300)
}

缓存机制

Java 对部分包装类(如 IntegerByteShortCharacter)提供了缓存机制,默认缓存范围如下:

  • Integer:-128 到 127(可通过 JVM 参数 -XX:AutoBoxCacheMax 调整上限)。
  • 其他包装类ByteShortCharacter(范围为 0~127),Boolean(缓存 TRUE 和 FALSE)。

示例

java

运行

Integer a = 127; // 缓存范围内,使用缓存对象
Integer b = 127; // 复用缓存对象
System.out.println(a == b); // true(引用相同)

Integer c = 128; // 超出缓存范围,创建新对象
Integer d = 128; // 创建另一个新对象
System.out.println(c == d); // false(引用不同)

注意事项

  1. 性能开销
    自动装箱会创建包装类对象,频繁装箱可能导致内存占用增加和垃圾回收压力。

  2. 空指针异常
    包装类对象可能为 null,拆箱时需注意避免 NullPointerException

    java

    运行

    Integer nullable = null;
    int value = nullable; // 运行时抛出 NPE
    

  3. 比较陷阱
    使用 == 比较包装类对象时,比较的是引用而非值。建议使用 equals() 方法比较值。

    java

    运行

    Integer x = 1000;
    Integer y = 1000;
    System.out.println(x == y); // false(引用不同)
    System.out.println(x.equals(y)); // true(值相同)
    

***自动拆箱(Auto-unboxing)是 Java 中的一种自动转换机制,允许将包装类(如 IntegerDouble 等)自动转换为对应的基本数据类型(如 intdouble 等)。这种转换是编译器提供的语法糖,在运行时会被转换为对包装类的 xxxValue() 方法的调用(例如 intValue()doubleValue() 等)。

触发场景

当包装类对象出现在需要基本数据类型的上下文中时,会自动触发拆箱:

  1. 赋值操作:将包装类对象赋值给基本数据类型变量。
  2. 算术运算:包装类对象参与数学运算(如 +-* 等)。
  3. 比较操作:包装类对象与基本数据类型进行比较(如 ==>< 等)。
  4. 方法参数:将包装类对象传递给需要基本数据类型参数的方法。

示例代码

java

运行

Integer wrapper = 100; // 自动装箱:Integer.valueOf(100)

// 1. 赋值操作中的拆箱
int primitive = wrapper; // 自动拆箱:wrapper.intValue()

// 2. 算术运算中的拆箱
int sum = wrapper + 200; // 等价于 wrapper.intValue() + 200

// 3. 比较操作中的拆箱
boolean isEqual = wrapper == 100; // 等价于 wrapper.intValue() == 100

// 4. 方法参数中的拆箱
printNumber(wrapper); // 自动拆箱后传递给方法

// 方法接收基本数据类型参数
public static void printNumber(int num) {
    System.out.println(num);
}

注意事项

  1. 空指针异常(NullPointerException)
    如果包装类对象为 null,自动拆箱时会抛出异常。

    java

    运行

    Integer nullable = null;
    int value = nullable; // 运行时抛出 NullPointerException
    

  2. 缓存机制的影响
    自动装箱时可能会复用缓存对象(如 Integer 缓存 -128~127),但拆箱后比较的是值本身。

    java

    运行

    Integer a = 127;
    Integer b = 127;
    System.out.println(a == b); // true(缓存对象引用相同)
    System.out.println(a > 126); // true(拆箱后比较值)
    

  3. 性能考虑
    频繁的装箱和拆箱会产生额外的对象创建和方法调用,可能影响性能,尤其在循环中需注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值