包装类详解———java三大特殊类之三

①基本原理
包装类就是将基本数据类型封装到类中。
范例:自己定义一个包装类。

class IntDemo {
    private int num ;
    public IntDemo(int num) {
        this.num = num ;
    }
    public int intValue() {
        return this.num ;
    }
}

这个时候的IntDemo实际上就是int数据类型的包装类,利用IntValue就可以实现基本数据类型变为对象的需求。
范例:IntDemo使用

public static void main(String[] args) {
// 子类对象向上转型
    Object obj = new IntDemo(55) ;
    IntDemo temp = (IntDemo) obj ; // 向下转型
    System.out.println(temp.intValue()); // 取出里面的基本数据类型操作
}

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

Java中有8种数据类型,如果每种数据类型都按照以上方式编写,存在以下问题:

  1. 开发中代码重复
  2. 在进行数学计算的时候,必须利用明确的方法将包装的数据取出后才可以进行运算。

所以Java为了方便开发,专门提供了包装类的使用,而对于包装类的使用,提供了两种类型。

1.对象型(Object的直接子类):Boolean、Character(char);
2.数值型(Number的直接子类): Byte、Double、Short、Long、Integer(int)、Float;

说明:关于Number类。

  1. Number类的定义:public abstract class Number implements java.io.Serializable.
  2. 在Number类里面实际定义有六种重要方法。

② 装箱与拆箱
在包装类与基本数据类型处理之中存在有两个概念:
装箱:将基本数据类型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理。
拆箱:将包装类中包装的基本数据类型取出。利用Number类中提供的六种方法。
范例:以int和Integer举例

Integer num = new Integer(55) ; // 装箱
int data = num.intValue() ; // 拆箱
System.out.println(data);

注:valueOf() 方法用于返回给定参数的原生 Number 对象值,参数可以是原生数据类型, String等。
该方法是静态方法。该方法可以接收两个参数一个是字符串,一个是基数。

以上操作采用的是手工的装箱和拆箱。在JDK1.5之后,提供了自动拆装箱的机制,最为重要的是由于此类机制的存在,可以直接利用包装类的对象进行各种数学计算。

范例:自动装箱与拆箱处理

// 自动装箱
Integer x = 55 ;
// 可以直接利用包装类对象操作
System.out.println(++x * 5 );

这个时候依然存在有"==" 和 “equals” 问题。

Integer num1 = new Integer(10) ;
Integer num2 = new Integer(10) ;
System.out.println(num1 == num2);
System.out.println(num1 == new Integer(10));
System.out.println(num1.equals(new Integer(10)));

说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用
已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产
生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。

关于基本数据类型与包装数据类型的使用标准如下:
1) 【强制】所有的 POJO 类属性必须使用包装数据类型。

注:POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO

2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。
3) 【推荐】所有的局部变量使用基本数据类型。

以后要进行各种数据的输入,一定都是字符串类型的接收。所以在开发之中,如何将字符串变为各个数据类型,这个时候就需要包装类支持。

  1. String变为int 类型(Integer类):public static int parseInt(String s) throwsNumberFormatException
  2. String变为double类型(Double类):public static double parseDouble(String s) throwsNumberFormatException
  3. String变为Boolean类型(Boolean类):public static boolean parseBoolean(String s)

范例:将字符串变为int型

String str = "123" ; // String类型
int num = Integer.parseInt(str) ;
System.out.println(num);

范例:将字符串变为double

String str = "123" ; // String类型
double num = Double.parseDouble(str) ;
System.out.println(num);

需要注意的是,将字符串转为数字的时候,字符串的组成有非数字,那么转换就会出现错误(NumberFormatException),以后就因为这个异常,我们要写一堆程序来回避。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值