包装类的用法,自动拆装箱和底层原理

包装类

包装类的来源:

  1. java讲究"万物皆对象",

  2. 但是八大基本类型却不能.出任何东西

  3. 官方为了自圆其说,就给这八大基本类型,创建了对应的引用类型(包装类)


自动拆箱和装箱

  • 1.5以后官方在底层自动做了"拆箱(引用变基本)"和"装箱(基本变引用)"
  • 也就是从堆内存数据变成栈内存数据,和从栈内存数据变成堆内存数据
  • 可以通过反编译看到底层还是调用了intValue()和valueOf()方法

原先的

在这里插入图片描述

反编译后,可以看到调用了intValue()方法

反编译


数据型的包装类实现了总父类Number的数据转换方法

package com.li.changGe.commonlyusedClass;

public class PackageClass {
  public static void main(String[] args) {

    int ints = new Integer("120");

    Integer integer = ints;
//-------------------------------------------------
    /**
     * 数据型的包装类实现了总父类Number的数据转换方法
     */
    ints = Integer.valueOf(integer);
    ints = integer.intValue();

    System.out.println(integer+"-"+ints);//120-120
//------------------------------------------------

    ints = Integer.parseInt("200");
    /**
     * toString有很多进制的重载方法
     */
    String s = Integer.toString(ints, 16);//转换成16进制
    System.out.println(s);//200 --> c8
    /**
     * 字符串变成包装类时,遇到boolean类型,
     * 除了"true"外都是false
     */
    boolean result = Boolean.parseBoolean("truee");
    System.out.println(result);//false
//---------------------------------------------------------------
    /**
     * 包装类底层默认有一个存储了-128~127的数组,
     * 构建对象时会优先从这里面拿数据,超出了再new 新对象
     */
    Integer integer1 = 120;

    System.out.println(integer == integer1);//true

    integer = 128;
    integer1 = 128;
    System.out.println(integer == integer1);//false
  }

}

包装类底层默认有一个存储了-128~127的数组

构建对象时会优先从这里面拿数据,超出了再new 新对象
valueOf
low和high的范围是从-128~127
lowHigh
创建了一个cache数组,存储了-128~127共256个对象
cache

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloses

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值