javaSE之包装类

java中的增强包装类

                                  基本数据类型与包装类型之间的对应关系
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

为什么要引入包装类:

在java中包含了8中基本数据类型,但是这8种基本数据类型不支持面向对象的编程机制。在简单的有效数据处理时,基本类型非常方便。但是除了基本类型之外的所有引用类型都继承了Object类,都可以当成Object类型变量使用。但基本类型的变量就不可以,如过一个方法需要Object类型的参数,但实际需要的是数字类型的数值,这就不太好处理。不过不用担心,java引用8种基本类型对应的8种包装类就可以很好的解决这个问题。

自动装箱与自动拆箱

自动装箱(Autoboxing)是指把一个基本类型的变量直接赋值给包装类变量,自动拆箱(AutoUnboxing)是指把包装类对象直接赋值给一个基本类型变量。下面示范一下自动装箱和自动拆箱的代码:

package com.day0719;

/**
 * @Author: Administrator
 * @CreateTime: 2019-07-20 11:00
 */
public class demo03 {
    public static void main(String[] args) {
        //把一个基本类型直接赋值给包装类
        int a = 321;
        Integer inObj = a;
        //把一个布尔类型的变量赋值给Object类型的变量
        Object boolObj = true;
        //把一个Internet类型赋值给int类型:
        Integer b = 321;
        int c = b; 
    }
}

注意:自动装箱和自动拆箱是必须注意类型匹配,只有在对应的基本类型和包装类型之间才可以进行转换。

包装类型实现基本类型和基本类型变量和字符串之间的转换

把字符串值转换成基本类型的值有两种方式:
1.利用包装类提供的parseXxx(String str)静态方法(除了Character之外所有的包装类都提供了该方法)
2.利用包装类提供的Xxx(String str)构造器

示例代码如下:

     String str1 = "321";
        String str2 = "3.21";
        String str3 = "true";
        //将字符串str1通过以下两种方式转换成基本类型int
        int i1 = Integer.parseInt(str1);
        int i2 = new Integer(str1);
        //将字符串str2转换成基本类型float类型
        float f1 = Float.parseFloat(str2);
        float f2 = new Float(str2);
        //将字符串转换成布尔类型
        boolean b1 = Boolean.parseBoolean(str3);
        boolean b2 = new Boolean(str3);

示范了int和float其余类型相同,值得注意的是,将字符串转换为布尔类型时,只有当字符串是“true”时,转换后的布尔类型才为true,其他字符串全为false。

将基本类型转换成字符串两种方式:

1.利用String类的方法valueof(Xxx);
2.将基本类型与“”相连接。

示范代码如下:

 int a = 8;
        String str = String.valueOf(21);
        String str1 = String.valueOf(a);
        String str2 = 321+"";

两个包装类型的实例比较

1.因为包装类型是引用类型,所以:
        System.out.println((new Integer(2))==(new Integer(2))); //false
        System.out.println((new Integer(2)).equals(new Integer(2))); //true
但是通过自动装箱(就是直接把一个基本类型值赋值给一个包装类型的实例),就会出现一些特别的情形
//通过自动装箱给包装类赋值
        Integer in1 = 2;
        Integer in2 = 2;
        System.out.println(in1 == in2);//true
        Integer in3 = 128;
        Integer in4 = 128;
        System.out.println(in3 == in4);//false

会发现当将两个 2 自动装箱后比较得到的是 true,而将两个 128 自动装箱后比较会得到 false。
出现这种情况是以为java的integer类的设计有关,有兴趣的可以查看integer的源代码中存储原理。
大概就是说,如果将一个 -128到127 的数自动装箱后,比较是true。如果不在 -128到127 之间的数,就会返回false。

比较不在 -128到127 之间的自动装箱实例或者new出来的包装类实例

在jdk7为所有包装类提供了compare(Xxx val1, Xxx val2)这个静态方法进行比较:

       System.out.println(Integer.compare((new Integer(2)),(new Integer(2)))); //0
        //通过自动装箱给包装类赋值
        Integer in3 = 128;
        Integer in4 = 128;
        System.out.println(in3 == in4);//false
        System.out.println(Integer.compare(in3,in4)); //0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值