java中基本数据类型包装类详解

基本数据类型

       基本数据类型是通过诸如 int a=7; 的形式来定义的,称为自动变量。这里自动变量是字面值。不是类的实例,即不是类的引用,这里并没有类的存在。a 是指向一个 int 类型的引用,指向 7 这个字面值。由于其大小确定生存期可知(这些定义在某个程序块中,程序块退出后,字段值就消失),因此存在栈中. 由于栈的数据可以共享,因此 int a=3; int b=3; 这段代码,编译器首先处理 int a =3; 先会在栈中创建一个变量为 a 的引用,然后查找有没有字面值为 3的地址,没有找到,就开辟一个存放 3 这个字面值的地址,然后将a 指向 3 的地址。接下来处理int b =3; 在创建完 b 这个引用变量后,由于栈中已经有 3 这个字面值,便将 b 指向 3 的地址。

基本数据类型对象包装类

       Java中的基本数据类型不是面向对象的,它们只是纯粹的数据,除了数值本身的信息之外,基本数据类型不带有其他信息或者可操作方法。这在实际使用中存在很多不足,为了解决这个不足,对每个基本数据类型都对应了一个引用类型,将基本数据类型值封装成了对象,称为基本数据类型对象包装类。
这里写图片描述

基本数据类型对象包装类特点:用于在基本数据和字符串之间进行转换

将字符串转成基本类型:

parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException

System.out.println(Integer.parseInt("123") + 2);

//打印结果为 125

将基本数值转成字符串有3种方式:

基本类型直接与””相连接即可;34+""

调用String的valueOf方法;String.valueOf(34) ;

调用包装类中的toString方法;Integer.toString(34) ;

基本数据类型和基本数据类型包装类对象的转换

使用int类型与Integer对象转换进行演示,其他基本类型转换方式相同。

基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数

Integer ii = new Integer("4");//构造函数中可以传递一个数字字符串

Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

Integer iiii = Integer.valueOf("4");//使用包装类中的valueOf方法

包装对象---->基本数值

int num = i.intValue();

基本数据类型包装类的自动装箱拆箱

       在需要的情况下,基本数据类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。比如:基本数据类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。

自动拆箱:对象转成基本数值

自动装箱:基本数值转成对象

Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);

i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。

注意自动装箱(byte常量池)细节问题

        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i==j);// false 对象地址
        System.out.println(i.equals(j));// true  继承Object重写equals,比较的对象数据
        System.out.println("===================");
        Integer a = 500;
        Integer b = 500;
        System.out.println(a==b);//false
        System.out.println(a.equals(b));//true
        System.out.println("===================");
        //在jdk1.5自动装箱时,如果数值在byte范围之内,JVM不会新创建对象空间而是使用原来已有的空间。
        Integer aa = 127; // Integer aa = new Integer(127)
        Integer bb = 127; // Integer bb = aa;
        System.out.println(aa==bb); //true
        System.out.println(aa.equals(bb));//true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值