zoukankan      html  css  js  c++  java
  • Java的包装类

    一、概述

       因为基本数据类型的变量身上没有任何的方法和属性,所以针对基本数据类型提供了对应的类形式--包装类。

      利用这个类产生对象,调用对象身上的方法来操作这个数据。

    二、分类

      包装类分为以下几种:

    基本数据类型 byte short long float double char  boolean int 
    包装类 Byte Short Long Float Double Character  Boolean Integer 

     三、包装类使用时需要注意点

    1.  除了int和char以外,其他类型的包装类都是将首字母大写。
    2. 自动封箱:将基本类型的变量直接赋值给对应的引用类型的对象。自动封箱在底层调用的是对应类的valueOf方法。
            //1. 将基本类型的变量直接赋值给对应的引用类型的对象过程--自动装箱
            //自动封箱在底层会调用对应类身上的valueOf方法
            //等价于Integer in = Integer.valueOf(i);
            int  i = 5;        
            Integer in = i;
            double d = 3.6;
            Double dou = d;
            Double dou = Double.valueOf(d);
            System.out.println(dou);

            3.对于整数而言,在进行自动封箱的时候,会有判断范围:-128~127,在此范围内的时候,数据会从Integer源码中的一个cache数组中取值,那么此时相同的两个数,其判断值是相同的,因为来自同一个位置。

           当数据大于127时,两个包装类的对象比较时,其地址就不一样了,因此不相等。

             int i = 26;
             Integer i1 = i; //i = 26 时 cache[26 + 128]
             Integer i2 = i; //1 = 526 new Integer(526)
             //利用 == 进行比较,比较的是地址
             System.out.println(i1 == i2);

         4.自动拆箱的定义:将引用/包装类型的对象直接赋值给对应的基本数据类型的变量。自动拆箱在底层调用的是对应对象身上的**Value方法。比如:

            //2. 如果是包装类型和基本类型运算的时候,包装类型会自动拆箱 即in 拆箱成了int 500
            int i = 500;
            Integer in = new Integer(500);
            //i = in.intValue();
            System.out.println(i == in); //500==500,此时进行了自动拆箱        
            System.out.println(in);

       5.自动封箱和拆箱是JDK1.5的特性之一。

       6.包装类产生的对象,只要实际值一样,那么哈希码一定一样。

       7.NaN和任何东西都不相等,包括它本身。示例如下

            //0.0/0 = NaN 非数字;和任何东西都不相等,包括自身
            System.out.println(0.0/0);
            System.out.println(Double.NaN == Double.NaN);
            System.out.println(Double.isNaN(0.0 / 0));

    四、String类型和基本数据类型的相互转化

        1、将String类型转化为基本数据类型使用包装类对应的parse***方法。

            比如将String转化为int:

      int i = Integer.parseInt("-128");
      System.out.println(i);
    int i = Interget.valueOf("-128");

             注意方法一和方法二的区别,方式1返回的是一个int类型;

           方法2底层实际上调用了Integer(Integer.parseInt(s))方法,先转化为int类型,然后封箱变为包装类;再将字符串转换为Integer类型,最后经过自动拆箱转化为int类型。这种方式是不可取的

          2、将基本数据类型转化为字符串,直接调用String的valueOf方法即可。

            String str3 = String.valueOf(i2);

  • 相关阅读:
    052-141
    052-140
    052-139
    052-138
    需要做笔记的页面
    日期总是显示1900/01/01 0:00:00
    延迟加载的树控件
    (简单)关于summary的注释
    江南检测
    fineui动态添加用户控件
  • 原文地址:https://www.cnblogs.com/chhyan-dream/p/10731750.html
Copyright © 2011-2022 走看看