• 包装类



    首先思考一个问题:为什么要存在 包装类?

                      Java是语言一门纯面向对象的编程语言,万物皆对象!

    如:

                int num = 30;     // int是基本数据类型

                Person p = new Person( );

    在某些特殊场合中,如集合中:集合要求放入的所有数据都必须是对象(即,引用类型)。

    而对于基本类型的数据来说,这并不满足是对象的要求:因此不能直接将 基本数据类型的数据 放入到集合中。

    为了能够放入该类数据,就要对这些基本数据类型进行对象化处理,于是需要借助 包装类

     


     Java有四类八种基本数据类型,这些基本数据类型都有对应的包装类:
     

    byte          →         java.lang. Byte        类

    short         →         java.lang.Short        类

    int             →         java.lang.Integer     类

    long          →         java.lang. Long       类

    float          →         java.lang.Float         类

    double      →         java.lang. Double     类

    char          →         java.lang.Character  类

    boolean    →         java.lang.Boolean     类

     
    Integer 类  (重点)
     
    1. 概述:
       java.lang.Integer类 被 final修饰,表示该类不能被继承。该类的内部包装了一个int类型的数据。
     
    2. 常用方法:
                  Integer(int value)    -采用参数指定的整数来构造对象
                  Integer(String str)   -采用参数指定的字符串来构造对象
    static int parseInt(String str) -用于将字符串转换为 int类型的整数。(静态方法使用 类名.的方式调用)
                  int intValue()           -将Integer类型对象中的整数值返回
     
    3. 装箱 和 拆箱   (从JDK1.5开始,支持自动装箱 和 自动拆箱 功能)
     
    装箱就是指 从基本数据类型 转换成 引用数据类型;  如: int  ===> Integer
    拆箱就是指 从引用数据类型 转换成 基本用数据类型;  如:Integer ===> int
     
     
    4. 自动装箱池
        从JDK1.5开始,支持自动装箱 和 自动拆箱 功能,为了提高装箱的效率,Integer类的内部还提供了一个自动装箱池,
    里面放好了  -128  ~ 127 之间的数据对象。当程序中需要对该范围中的数据进行装箱时,直接从装箱池中获取。超出该范围的数据,才需要创建新的对象。
     
     代码演示:
    public class IntegerTest {
    
        public static void main(String[] args) {
            
             //根据参数指定的int类型来构造Integer类型的对象 
            // int ==> Integer类型   : 装箱 操作  (手动)
            Integer it1 = new Integer(123);
            System.out.println("字符串类型的it1---"+it1);
            
            // 将Integer类型对象中的整数值返回
            // Integer类型 ==> int  : 拆箱 操作    (手动)
            int res = it1.intValue();
            System.out.println("int类型的it1-------"+res);
            
            System.out.println("---------------------------------");
            
            // int 数据类型 ==>  Integer类型,
            Integer it2 = 456; // 这里Integer能够直接 接收一个 int数据类型:是因为jdk1.5之后实现了自动装箱功能
            System.out.println("字符串类型的it2---"+it2);
            
            // Integer 数据类型 ==>  int 类型,
            res = it2;    // 
            System.out.println("int类型的it2-------"+res);
            
            System.out.println("---------------------------------");
            
            Integer it3 =  127;  
            Integer it4 =  127;
            Integer it5 = new Integer(127);
            Integer it6 = new Integer(127);
            
            // 此时 it3 ,it4 都是Integer类型
            System.out.println("it3 == it4 ?----" +(it3 == it4));    // == 用于比较 引用类型时,比较的是对象的地址   127 在 [-128, 127]自动装箱的数据范围之内,所以127来自自动装箱池
            System.out.println("it3.equals(it4)----"+(it3.equals(it4)));  // Integer类重写了Object的equals()方法,用于比较两个对象的内容是否一致,it3,it4都是127
            
            // 此时it5, it6 都Integer类型
            System.out.println( "it5 == it6 ?----" +(it5 == it6));     // == 用于比较 引用类型时,比较的是对象的地址 it5 ,it6都是通过new出来的,是两个不同的对象。
            System.out.println("it5.equals(it6)----"+(it5.equals(it6)));    // // Integer类重写了Object的equals()方法,用于比较两个对象的内容是否一致,it3,it4都是127
            
            
            System.out.println("---------------------------------");
            
            // 同理 it7, it8 都Integer类型
            Integer it7 =  128;  
            Integer it8 =  128;  
            System.out.println( "it7 == it8 ?----" +(it7 == it8));   // 比较对象地址      但是,128不在自动装箱池的数据范围之内。  
            System.out.println("it7.equals(it8)----"+(it7.equals(it8))); // 比较内容
    
        }
    
    }

     结果;

    字符串类型的it1---123
    int类型的it1-------123
    ---------------------------------
    字符串类型的it2---456
    int类型的it2-------456
    ---------------------------------
    it3 == it4 ?----true
    it3.equals(it4)----true
    it5 == it6 ?----false
    it5.equals(it6)----true
    ---------------------------------
    it7 == it8 ?----false
    it7.equals(it8)----true

     


     常用方法代码测试:

    public class IntegerTest {
    
        public static void main(String[] args) {
            
            // 使用参数指定的整数来构造对象
            Integer it1 = new Integer(123);
            System.out.println("自动调用toString()方法 打印it1 = "+it1);      // 自动调用toString()方法 
            System.out.println("获取包含的整数值: "+it1.intValue());                               // 获取包含的整数值 123
            
            // 使用参数指定的字符串来构造对象
            Integer it2 = new Integer("456");
            System.out.println("自动调用toString()方法 打印it2 = "+it2);      // 自动调用toString()方法 
            System.out.println("获取包含的整数值: "+it2.intValue());       // 获取包含的整数值值 456
            
            // 将字符串转换为整数
            int parseInt = Integer.parseInt("789");
            System.out.println("将字符串转换为整数:"+parseInt);
            
            // 将整数转换为 二进制形式 的字符串
            String binaryString = Integer.toBinaryString(-1);
            System.out.println("将整数转换为 二进制形式 的字符串: "+binaryString);
            
            // // 将整数转换为 二进制形式 的字符串
            String hexString = Integer.toHexString(-1);
            System.out.println("将整数转换为 二进制形式 的字符串: "+hexString);
            
    
        }
    
    }

    结果:

    自动调用toString()方法 打印it1 = 123
    获取包含的整数值: 123
    自动调用toString()方法 打印it2 = 456
    获取包含的整数值: 456
    将字符串转换为整数:789
    将整数转换为 二进制形式 的字符串: 11111111111111111111111111111111
    将整数转换为 二进制形式 的字符串: ffffffff

  • 相关阅读:
    三层架构简单实例【转】
    排序 普通插入法排序
    排序 选择排序
    C#中的继承与覆盖
    排序 冒泡排序法
    c#使用Split分割字符串的几种方法
    GROUP BY,WHERE,HAVING之间的区别和用法
    递归 斐波那契数列
    【公众号系列】一文看懂税费改革
    【MM系列】SAP库龄报表逻辑理解
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11741652.html
Copyright © 2020-2023  润新知