zoukankan      html  css  js  c++  java
  • Java中特殊的类——包装类

    Java中特殊的类——包装类

    包装类就是将基本数据类型封装在类中。

    1、包装类

    (1)自定义包装类

    将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理。

    此时IntDemo类就是int的包装类,利用intValue 可实现基本数据类型转化为对象的需求。

    //自定义int包装类

    class IntDemo{

    private int number;

    public IntDemo(int number){

    this.number = number;

    }

    public int intValue(){

    return this.number;

    }

    }

    public class Demo {

    public static void main(String[] args) {

    //向上转型

    Object object = new IntDemo(20);

    //向下转型

    IntDemo intDemo = (IntDemo)object;

    System.out.println(intDemo.intValue());

    }

    }

    运行结果:

     

    (2)Java提供包装类

    对象型(Object的直接子类):Booleanboolean)、Characterchar

    数值型(Number的直接子类):ByteDoubleShortLongIntegerint)、Float.

     

    2、装箱与拆箱

    1)包装类和基本数据类型之间存在的关系:装箱与拆箱

    装箱:将基本数据类型转变为包装类对象,利用包装类提供的构造方法实现装箱处理。

    拆箱:利用Number提供的六种方法将包装类中的包装的基本数据类型取出。

    jdk5之前采取的是手工拆装箱的机制

            //手动装箱

    Integer num = new Integer(20);

    //拆箱

    int data = num.intValue();

        

    jdk5之后提供了自动拆装箱的机制,更为重要的是,由于此机制的存在可以直接利用包装类的对象进行各种数学运算。

            //自动装箱

    Integer num1 = 10;

    //直接利用包装类对象操作

    System.out.println(num1++ *5);

    System.out.println(num1);

    (2)包装类中==”和equals问题(推荐使用equals进行比较

    public class Demo {

    public static void main(String[] args) {

           Integer num10 = -129;

    Integer num11 = -129;

    System.out.println(num10 == num11);

    System.out.println(num10.equals(num11));

    System.out.println();

    Integer num12 = -128;

    Integer num13 = -128;

    System.out.println(num12 == num13);

    System.out.println(num12.equals(num13));

    System.out.println();

    Integer num2 = 18;

    Integer num3 = 18;

    System.out.println(num2 == num3);

    System.out.println(num2.equals(num3));

    System.out.println();

    Integer num6 = 127;

    Integer num7 = 127;

    System.out.println(num6 == num7);

    System.out.println(num6.equals(num7));

    System.out.println();

    Integer num4 = 128;

    Integer num5 = 128;

    System.out.println(num4 == num5);

    System.out.println(num4.equals(num5));

    }

    }

     

         综合上面的代码不难看出:自动装箱 Interger 变量名 = ?在-128——127取值时,“==”和equals的判断结果相同,而超过此范围则用“==”进行判断会出错。

    这是因为在-128——127”范围内Interger对象IntergerCache.cache池上产生,会复用已有对象,而超过此范围,则在堆上产生而并不会复用已有对象。

    3、字符串与基本类型的转换

    1)字符串转换成基本数据类型

    以后要进行各种数据输入时一定都需要字符串类型来接收,那么如何将字符串转化成基本数据类型就需要包装类的支持。

    String ->int(Interger类):public static int parseInt(String s)             throws NumberFormatException

    String ->doule(Double类):public static double parseDouble(String s) throws NumberFormatException

    String ->boolean(Boolean类): public static boolean parseBoolean(String s).

    public class Demo {

    public static void main(String[] args) {

    String str2 = "true";

    boolean bol = Boolean.parseBoolean(str2);

    System.out.println(bol);

    String str3 = "true1";

    boolean bol1 = Boolean.parseBoolean(str3);

    System.out.println(bol1);

    String str = "4737284992";

    double dou = Double.parseDouble(str);

    System.out.println(dou);

    String str1 = "47372@84992";

    double dou1 = Double.parseDouble(str1);

    System.out.println(dou1);

    }

    }

     

     

    注意:将字符串转化成数字时,若字符串中存在非数字字符,则会出现NumberFormatException异常。而字符串与Boolean转换不受此影响。

    (2)基本数据类型转换成String

            任何数据类型使用了+”连接空白字符就会变成字符串类型。

            使用String类中提供的valueOf()方法,也可将其转换成字符串(该方法不产生垃圾)

    public class Demo {

    public static void main(String[] args) {

    //基本数据类型->String

    String str1 =  String.valueOf(100);

    String str2 = String.valueOf(false);

    System.out.println(str1);

    System.out.println(str2);

           String str3 = 100521+"";

    System.out.println(str3);

    }

    }

     

     

  • 相关阅读:
    python-使用pyecharts绘制各省份985学校数量图
    python-将多个表格的信息合并到一个表格中
    python-使用百度AipOcr实现表格文字图片识别
    python安装OCR识别库
    python-一种去掉前后缀获取子串的方法
    python-一种字符串排序方式
    How to write educational schema.
    RabbitMq related
    OPENId是什么, OAUTH 是什么
    使用abp的 redis cache
  • 原文地址:https://www.cnblogs.com/edda/p/12601268.html
Copyright © 2011-2022 走看看