包装类(wrapper class/ラッパークラス),自动拆箱,自动装箱,基本类型与字符串之间的转换

场景:通过文本框获得用户输入的数字数据,因为文本框里面是书写文本数据的,所以后台得到的都是字符串。如果想要对字符串中的数字进行运算,必须将字符串转换成数字。
java语言属于一种面向对象的语言,会把真实存在的事物或信息都会进行描述并封装为类。

在java中存在8种基本数据类型,而java语言也把这8种基本数据类型进行了封装。称为:包装类。

学习Java语法基础的时候,我们知道Java中有8种基本数据类型,这些数据类型可以在内存中开辟出对应类型的空间,然后可以保存对应类型的数据。

8种基本数据类型,它们仅仅只能规定空间的类型,而我们不能使用面向对象的方式去使用8种基本类型创建对象(new int();不能这样去创建基本类型的对象)。

由于8种基本类型不能像类类型一样去new对象,于是Java就对每种基本类型给出了一个对应的类类型。

而java语言也把这8种基本数据类型进行了封装。称为:包装类。

基本类型 对应的包装类(位于java.lang包中)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

在这里插入图片描述

装箱与拆箱

  • 装箱:从基本类型转换为对应的包装类对象。int----》Integer

  • 拆箱:从包装类对象转换为对应的基本类型。Integer----》int

用Integer与 int为例:

基本数值---->包装对象

Integer i1 = new Integer(4);//使用构造函数
Integer i2 = Integer.valueOf(4);//使用包装类中的valueOf方法

包装对象---->基本数值

int num = i.intValue();

自动装箱与自动拆箱

自动装箱:可以直接把一个基本类型的数据赋值给自己对应的包装类型。

自动拆箱:可以直接把一个包装类型的数据赋值给自己对应的基本类型。

Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
int j = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。

在这里插入图片描述
在这里插入图片描述

package com.web;

public class Test44 {
    
    
    public static void main(String[] args) {
    
    
        //基本数值---->包装对象
        Boolean bool = Boolean.valueOf(true);
        Integer i = Integer.valueOf(4);
        Character c = Character.valueOf('c');//c = c
        Character c1 = Character.valueOf((char) 98);//c1 = b
        Byte b = Byte.valueOf((byte) 98);//b = 98
        //Byte b1 = Byte.valueOf("b");//Exception in thread "main" java.lang.NumberFormatException: For input string: "b"
       Float f = Float.valueOf((float) 1.2);
       Double d = Double.valueOf(1.2);
       Long l = Long.valueOf((long) 1.2);
       Short s = Short.valueOf((short) 12);

       //包装对象---->基本数值
        int i1 = i.intValue();
        boolean b1 = bool.booleanValue();
        char c2 = c.charValue();
        char c3 = c1.charValue();
        byte b2 = b.byteValue();
        float f1 = f.floatValue();
        double d1 = d.doubleValue();
        long l2 = l.longValue();
        short s2 = s.shortValue();

        //自动装箱
        Boolean bool2 = true;
        Integer i2 = 1;
        Character c4 = 'c';
        Byte b3 = 23;
        Float f2 = 1.2f;
        Double d2 = 1.2;
        Short s3 = 2;
        Long l3 = 2L;

        //自动拆箱
        boolean bool3 = bool2;
        int i3 = i2;
        char c5 = c4;
        byte b4 = b3;
        float f3 = f2;
        double d3 = d2;
        short s4 = s3;
        long l4 = l3;
    }
}

基本类型与字符串之间的转换

基本类型转字符串
1、可以直接使用+号

2、使用String类中的valueOf

​ static String valueOf(int i)返回 int参数的字符串表示形式。

3、使用对应的包装类中重载的toString方法

​ static String toString(int i)返回表示指定整数的 String对象。

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
       //使用+完成基本数据类型到字符串的转换
        int x=123;
        String s=x+"";
        //输出
        System.out.println("s = " + s);
        //使用String类中的valueOf方法
        String s1 = String.valueOf(1.23);
        //输出
        System.out.println("s1 = " + s1);
        //使用包装类中的方法将基本类型数据转换为字符串
        String s2 = Double.toString(1.2);
        //输出
        System.out.println("s2 = " + s2);
    }
}

字符串转换成对应的基本类型
字符串转成基本类型使用包装类中的parseXxxx方法。

public static int parseInt(String s):将字符串参数转换为对应的int基本类型。

注意:

1)后期学习中遇到和parse相关的函数,都是把字符串解析成其他的数据。

2)使用parseXxxx方法把一个字符串转成基本数据类型的时候,前提是这个字符串一定能够被转成对应的基本类型,否则会发生NumberFormatException异常。

根据查看API我们得知,如果转换不了会发生异常,所以在开发中如果使用上述方法将字符串转换为基本数据类型,需要对转换的代码进行捕获异常处理。

代码使用(仅以Integer类的静态方法parseXxx为例)如:

public class Demo18WrapperParse {
    
    
    public static void main(String[] args) {
    
    
        int num = Integer.parseInt("100");
    }
}

注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。

package com.web;

public class Test43 {
    
    
    public static void main(String[] args) {
    
    
        //基本类型转字符串
        //使用String类中的valueOf
        int i = 1;
        String s1 = String.valueOf(1.2);
        String s2 = String.valueOf(true);
        String s3 = String.valueOf(i);
        String s0 = String.valueOf('a');
        //byte、short、char-->int-->long-->float-->double
        int j = 2;
        byte x = 2;
        short y = 2;
        long l =2;
        //使用对应的包装类中重载的toString方法
        String s8 = Byte.toString(x);
        String s9 = Byte.toString((byte) 2);
        String s13 = Short.toString(y);
        String s12 = Short.toString((short) 3);
        String s10 = Character.toString('c');
        String s11 = Character.toString((char) 99);
        String s6 = Integer.toString(j);
        String s14 = Long.toString(l);
        String s7 = Float.toString(2.3F);
        String s4 = Double.toString(1.23);
        String s5 = Boolean.toString(true);

         //字符串转换成对应的基本类型
        //字符串转成基本类型使用包装类中的parseXxxx方法
        byte b = Byte.parseByte(String.valueOf(2));
        byte b1 = Byte.parseByte("2");
        // byte[] getBytes ():把字符串转换为字节数组
        byte[] b2 = "2".getBytes();
        byte b3 = Byte.parseByte("a");
        short sh = Short.parseShort("2");
        //没有Character.parseCharacter(),因为一般没有单个的字符串
        //char c1 = Character.parseCharacter(s);
        // char[] toCharArray():把字符串转换为字符数组
        char[] c = "2".toCharArray();
        int i1 = Integer.parseInt("100");
        long l2 = Long.parseLong("10");
        float f = Float.parseFloat("10.0");
        double d = Double.parseDouble("100");
        Boolean bool = Boolean.parseBoolean("true");
        System.out.println("bool = " + bool);//bool = true
        System.out.println("b1 = " + b1);//b1 = 2
        System.out.println("b2 = " + b2);//b2 = [B@5e2de80c
        System.out.println("c = " + c);//c = [C@1d44bcfa
        System.out.println("sh = " + sh);//sh = 2
        System.out.println("b3 = " + b3);//Exception in thread "main" java.lang.NumberFormatException: For input string: "a"


    }
}

Guess you like

Origin blog.csdn.net/djydjy3333/article/details/121512827