JAVA银行软开-常见八股文-(5)基本数据类型和包装类

【参考文献】:https://blog.csdn.net/Super_WBW/article/details/124805464

                        https://javaguide.cn/java/basis/java-basic-questions-01.html

一、包装类

包装类,就是将基本数据类型,用一个类进行了一层包装,可以按照引用类型进行使用。同时还提供了若干用来进行数据转换的操作。

想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象。

二者之间的区别

  • 在Java中,一切皆对象,但八大基本类型却不是对象。
  • 声明方式的不同,基本类型无需通过new关键字来创建,而包装类型需new关键字。
  • 存储方式及位置的不同,**基本类型是直接存储变量的值保存在堆栈中能高效的存取**,**包装类型需要通过引用指向实例,具体的实例保存在堆中**。
  • **初始值的不同**,**包装类型的初始值为null**,基本类型的的初始值视具体的类型而定,比如int类型的初始值为0,boolean类型为false;
  • 使用方式的不同,比如与集合类合作使用时只能使用包装类型。
  • 什么时候该用包装类,什么时候用基本类型,看基本的业务来定:这个字段允允许null值,就需要使用包装类型,如果不允许null值,,使用基本类型就可以了,用到比如泛型和反射调用函数,就需要用包装类!
  • **基本数据类型的比较可以用==,但是包装类的比较必须用equals方法**

二、 自动装箱和自动拆箱

装箱(Boxing):**将基本数据类型转化为包装类**

拆箱(Unboxing):**将包装类转化为基本数据类型**

基本类型和包装类型的转化:

int i = 100;
Integer n = Integer.valueOf(i);
int x = n.intValue();

Java编译器可以帮助我们自动在int和Integer之间转型:

Integer n = 100; // 编译器自动使用Integer.valueOf(int)
int x = n; // 编译器自动使用n.intValue()

这种直接把int变为Integer的赋值写法,称为自动装箱(Auto Boxing)

反过来,把Integer变为int的赋值写法,称为自动拆箱(Auto Unboxing)

**(自动装箱和自动拆箱只发生在编译阶段)**

【经典例题】

public class TestInteger {
    public static void main(String[] args) {
        int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        System.out.println(i == i2); //Integer会自动拆箱为int,所以为true
        System.out.println(i == i3); //true,理由同上
        //Integer有缓存[-128,127]
        Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127);
        Integer i5 = 127;
        System.out.println(i4 == i5);//true
        
        Integer i6 = 128;
        Integer i7 = 128;
        System.out.println(i6 == i7);//false
        
        Integer i8 = new Integer(127);
        System.out.println(i5 == i8); //false
        
        Integer i9 = new Integer(128);
        Integer i10 = new Integer(128);
        System.out.println(i9 == i10);  //false
    }
}

----为什么i4和i5比是true,而i6和i7比是false呢?

关键就是看valueOf()函数了,这个函数对于-128到127之间的数,会进行缓存, Integer i4 = 127时,会将127进行缓存,下次再写Integer i5 = 127时,就会直接从缓存中取,就不会new了。所以i4和i5比是true,而i6和i7比是false。

而对于后边的i5和i8,以及i9和i10,因为对象不一样,所以为false。

总结如下:

  • 无论如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。
  • 两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。因为java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
  • 两个都是new出来的,都为false。还是内存地址不一样。
  • int和Integer(无论new否,和数字大小)比,都为true,因为会把Integer自动拆箱为int再去比

三、基本类型和包装类之间的转化

基本数据类型到包装类(装箱):调用包装类的valueOf()方法。例如:Integer.valueOf(i);,Float fo = Float.valueOf(i);

包装类到基本数据类型(拆箱):包装类对应变量的xxxValue()方法。 xxx为基本数据类型。例如:n.intValue(), f.floatValue()

代码如下:

//1 int 转换成Integer(装箱)
 int i = 13;
 Integer integer = Integer.valueOf(i);
 
//2 Integer转换成int(拆箱)
Integer i = new Integer (10); // Integer i = 10(自动装箱)
int a = i.intValue

//其它整数类型(byte、shot、long)的转换方式与 int 相同。

 【基本类、包装类与String类型的转换】

**包装类 → String**

// 用 Integer 来举例,其它包装类的转换方式与 Integer 相同
Integer i = 13;
String string = i.toString();

//或者使用包装类的toString()方法
Integer integer = new Integer(1);
String s = Integer.toString(integer);

**String → 包装类**

//使用对应包装类的valueOf()方法
String string = "13";
Integer integer = Integer.valueOf(string);

**String → 基本数据类型**

//使用对应包装类的parseXxx()方法
String s = "1";
int i = Integer.parseInt(s);

**基本数据 → String类型**

//方式一:使用+""
int i = 1;
String s = i + "";
//方式二:使用String的valueOf()方法
int i=1;
String s = String.valueOf(i);

【区别Valueof和parseInt()】

  • Integer.Valueof()是把给定的String参数转化成Integer对象类型
  • parseInt()是把String 变成int的基础数据类型

【补充】

BigInteger 内部使用 int[] 数组来存储任意大小的整形数据。

相对于常规整数类型的运算来说,BigInteger 运算的效率会相对较低。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基本数据类型包装类Java中用来表示数据的两种不同方式。 1. 基本数据类型(Primitive Data Types): - Java基本数据类型有8种:byte、short、int、long、float、double、char和boolean。 - 这些基本数据类型直接存储着数据的值,它们是直接操作内存的,因此效率较高。 - 基本数据类型不具有任何方法,不能调用任何方法。 2. 包装类(Wrapper Classes): - 包装类是用来将基本数据类型包装起来,以便能够以对象的形式使用。 - Java提供了对应于每种基本数据类型包装类:Byte、Short、Integer、Long、Float、Double、Character和Boolean。 - 包装类提供了许多有用的方法,可以进行类型转换、比较、运算等操作。 - 包装类是不可变的(immutable),即一旦创建就无法修改其值。 区别: - 基本数据类型是直接存储数据的值,而包装类是将基本数据类型包装成对象。 - 基本数据类型效率较高,而包装类的效率较低,因为需要进行对象的创建和销毁操作。 - 基本数据类型不能调用任何方法,而包装类提供了许多有用的方法。 - 包装类可以用于泛型、集合类等需要对象作为参数的场景,而基本数据类型则不能直接使用。 - 基本数据类型在内存中占据的空间大小是固定的,而包装类的内存消耗较大,因为需要额外存储一些信息。 总的来说,基本数据类型适合用于简单的数据操作,而包装类适合用于需要更多功能和灵活性的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值