zoukankan      html  css  js  c++  java
  • Java中的装箱拆箱

    一)  装箱与拆箱

    Java中有概念是一切皆对象,因为所有的类都默认继承自Object。但是,对于数据类型是个例外,如short,int,long,float,double, byte,char,boolean。为了同一“一切接对象“这个概念,Java提供了装箱和拆箱功能。

    也就是说Java为上面这八种数据类型提供了对应的Java类(包装类)实现。如下:

    int

    Integer

    short

    Short

    long

    Long

    float

    Float

    double

    Double

    byte

    Byte

    char

    Character

    boolean

    Boolean

    • 将基本数据类型包装为Java类的过程成为装箱
    • 将Java类转换为基本数据类型的过程成为拆箱

    下面以int数据为例,演示装箱和拆箱:

    package org.lyk.main;
    
    import org.lyk.entities.*;
    
    public class Main
    {
        public static void main(String[] args)
        {
            Integer num1 = new Integer(33);//装箱
            int num2 = num1.intValue();//拆箱
            System.out.println(num1 * 2);
            System.out.println(num2 * 2);
        } 
    }

    对于float,double等其它数据类型,Java也提供了如floatValue(),doubleValue()等函数用于拆箱操作。

    一)  自动装箱与拆箱

    上面的代码要我们显示的调用Integer构造函数装箱,然后调用intValue()函数拆箱。这样显得比较臃肿也不利于使用,为此Java提供了自动装箱与拆箱。请看下面的代码演示:

    package org.lyk.main;
    
    import org.lyk.entities.*;
    
    public class Main
    {
        public static void main(String[] args)
        {
            Integer num1 = 33;
            int num2 = num1;
            System.out.println(num1 * 2);
            System.out.println(num2 * 2);
        }
    }

    自动装箱/拆箱不用我们手动去写构造和调用拆箱函数,一切都自动完成。这样它的使用和普通数据类型没有任何区别了。

    一)  数据类型划分

    前面提到的八种数据类型,其实可以再分为两大类:

    • 数值型(Number的直接子类):Short,Integer,Long,Double,Float,Double
    • 对象型(Object的直接子类):Character,Boolean

    二)  Object接收基本数据类型

    有了装箱拆箱,我们可以用Object接收基本数据类型。

    package org.lyk.main;
    
    import org.lyk.entities.*;
    
    public class Main
    {
        public static void main(String[] args)
        {
            Object num1 = 33;//先将33自动装箱为Integer,在默认向上转型为Object
            int num2 = (Integer)num1;//先将Object强制向下转型为Integer,然后再自动拆箱为num2
            System.out.println(num1);
            System.out.println(num2);
        }
    }

    上面代码中的注释已经解释了Object接收基本数据类型的过程。所以,在Java中,任何对象都可以用Object来接收,可以说“Object一统天下“了!

    三) 基本数据类型与String的转换

    使用上面提到的包装类,最大的好处是可以和String类型相互转换

    • 基本数据类型转换为String,用包装类的partXXX()方法
    • String类型转换为基本数据类型,用String.valueOf()方法

    以int数据为例:

    package org.lyk.main;
    
    import org.lyk.entities.*;
    
    public class Main
    {
        public static void main(String[] args)
        {
            {
                //基本数据类型转换为String
                int num1 = 33;
                Integer num2 = 44;
                System.out.println(String.valueOf(num1));
                System.out.println(String.valueOf(num2));
            }
            
            {
                //String转换为基本数据类型
                String str = "123";
                int num1 = Integer.parseInt(str);
                Integer num2 = Integer.parseInt(str);
                System.out.println(String.valueOf(num1));
                System.out.println(String.valueOf(num2));
            }
        }
    }
  • 相关阅读:
    mysql 时间戳 转 时间
    VSCode搭建VUE 开发环境
    虚拟通信
    JavaScript 获取客户端计算机硬件及系统信息
    Thinkphp关联模型BELONGS_TO
    docker部署rancher踩坑篇
    青龙面板 脚本 依赖库下载安装
    Linux 随记
    Tekton DAG代码
    手写Spring valar
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5911709.html
Copyright © 2011-2022 走看看