java 基础 之 包装类

版权声明:欢迎转载.转载请注明出处 https://blog.csdn.net/zhaluo_dehezi/article/details/85052076

包装类的简单介绍:

  • java 8种基本数据类型 对应 8中基本包装类
  • 除了Char 对应Character, int对应Integer之外.其他6种基本数据类型对应的都是首字母大写

java不同版本对包装类的加强

  • JDK 1.5 之前
    • 把基本数据类型转换成包装类型都是使用构造方法
    • 8个包装类中除了character之外.还可以通过传入一个字符串参数来构建包装类
    • 包装类转成基本数据类型可以使用包装类的 XXXValue()静态方法[已经过时]
  • JDK 1.5 之后提供了自动装箱与拆箱的功能
    • 自动装箱
      • 可以把一个基本数据类型的值.直接赋值给包装类
    • 自动拆箱
      • 把一个包装类的值.直接赋值给一个基本数据类型
  • 除了自动装箱与自动拆箱以外.包装类还可以与String 进行相互转换
    • String 转基本数据类型
      • 包装类提供的静态方法 parseXXX(String s),
      • 除了Character 之外所有的方法都提供了该方法;
      • 包装类提供的XXX(String s) 构造器
      • 利用String重载的多个valueOf()方法;
  • JDK 1.7 版本之后又给所有的包装类添加了一个 compare(xxx,xxx)方法.用于比较两个参数的大小
    • 大于 返回 1
    • 等于返回 0
    • 小于返回 -1
    • 值得一提的是Date日期了也有这个方法
  • JDK .17 除了compare之外,还给character 增加了大量的工具方法来进行判断
  • JDK 1.8 版本再次加强了这些包装类的功能.为整型包装类支持无符号算数运算.
    详见jdk API

实例代码

package com.example.javademo.Wrapper;

import org.junit.Test;

/**
 * 本篇主要演示包装类与基本数据类型的自动装箱与自动拆箱
 *
 * @author 扎罗
 * @version 1.0
 * @since 2018年12月21日
 */
public class AutoBoxAndAutoUnBox {


    /**
     * 演示自动装箱与拆箱
     */
    @Test
    @SuppressWarnings("all")
    public void autoBoxAndAutoUnBoxTest() {

        int b = 12;
        // 自动装箱
        Integer i = b;
        //自动拆箱
        int a = i;
        // JDK 1.5 以前 基本数据类型转成包装类的方式;都是依赖够着方法
        Integer c = new Integer(12);
        Integer d = new Integer("12");
        // JDK 1.5 以前 包装类转成基本数据类型
        int cc = c.intValue();
        int i1 = d.intValue();

    }

    @Test
    public void stringTest() {

        //String 转 基本数据类型
        char    c1  = 'c';
        int     i2  = 123;
        long    l1  = 12341239L;
        byte    b1  = 1;
        double  d1  = 12.1d;
        float   f1  = 1212.11f;
        boolean bo1 = false;
        //String 提供的重载的valueOf() 方法
        String s1 = String.valueOf(i2);
        String s2 = String.valueOf(l1);
        String s3 = String.valueOf(b1);
        String s4 = String.valueOf(d1);
        String s5 = String.valueOf(f1);
        String s6 = String.valueOf(bo1);
        String s7 = String.valueOf(c1);
        System.out.println("=======int 转 String : " + s1);
        System.out.println("=======long 转 String : " + s2);
        System.out.println("=======double 转 String : " + s4);
        System.out.println("=======boolean 转 String : " + s6);
        // 包装类提供的parseXXX()与构造器();
        int i3 = Integer.parseInt(s1);
        System.out.println("======Integer parseInt()" + i3);
        double v = Double.parseDouble(s4);
        System.out.println("======Integer parseInt()" + v);

        //基本类型装字符串.最简单的方法 + "";
        String ss = d1+"";
    }

    /**
     * Integer 的特殊性
     *      Integer缓存设计 -128~127 刚好是short的范围
     */
    @Test
    public  void  integerTest(){

        int i1 =  12;
        Integer i2 =  129;
        System.out.println("=====缓存以外的integer实例比较" + (i1==i2));
        /*
        这两个明明看起来数字相等.但是输出的结果却为false;
        原因就在于Integer 缓存的设计.
        在 -128 ~ 127 的数字都是取自缓存.但是不在这个范围内的==就属于比较地址值了.
        所以不相等
         */
        Integer  i3 = 129;
        System.out.println("缓存以外的Integer实例进行比较"+(i2==i3));
    }

    /**
     * JDK 7 新增的compare 方法
     *      返回结果 1 代表 大于
     *              0 代表 等于
     *              -1代表 小于
     */
    @Test
    public void compareTest(){

        /*
         *比较特殊的boolean的比较
         */
        System.out.println(Boolean.compare(true,false));    //1
        System.out.println(Boolean.compare(false,false));   //0
        System.out.println(Boolean.compare(false,true));    //-1
        System.out.println(Boolean.compare(true,true));     //0
        System.out.println("===========================");

        Integer i = 10;
        Integer s = 1222;
        System.out.println(Integer.compare(i,s));   //-1

    }
}

猜你喜欢

转载自blog.csdn.net/zhaluo_dehezi/article/details/85052076