【Java】快速掌握之包装类

1️⃣学习目标

  • 什么是包装类?
  • 包装类与基本数据类型之间的对应关系
  • 包装类的常用方法

2️⃣基本数据类型

Java中的包装类包括Integer、Long、Short 、Byte、Character、Double、Float、Boolean、BigInteger、BigDecimal 。其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算, BigInteger 支持任意精度的整数, BigDecimal支持任意精度带小数点的运算。
基本数据类型

包装类为了解决以下基本数据类型遇到的问题:

  1. 不能像对象一样拥有属性和方法。
  2. 无法进行对象化交互
基本类型对应的包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

3️⃣包装类特点

Java API

  • 所有的包装类都被Final修饰,说明包装类不能被继承且没有子类的。
  • 数值型包装类继承自Number类,字符型和布尔型则继承自Object类。

4️⃣装箱和拆箱

  1. 手动装箱、拆箱
public class TestNumber {
 
    public static void main(String[] args) {
        int i = 5;
        //基本类型转换成封装类型
        Integer it = new Integer(i);      
        //封装类型转换成基本类型
        int i2 = it.intValue();
         
    }
}
  1. 自动装箱、拆箱

public class TestNumber {
 
    public static void main(String[] args) {
        int i = 5;      
        //自动转换就叫装箱
        Integer it2 = i;
        //自动转换就叫拆箱
        int i3 = it;
        
    }
}
  1. byte和Integer之间不能进行自动拆箱和自动装箱
public class NumberTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte b = 1;
        //byte和Integer之间能否进行自动拆箱和自动装箱
		Integer i1 = b; // 不能把byte直接自动装箱成Integer
		b = new Integer(1); // 也不能把Integer自动拆箱成 byte
	}
}

byte和Integer之间不能进行自动拆箱和自动装箱

  1. 基本数据类型转化为字符串
public class NumberTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 1;
		// 基本数据类型转换为字符串
		Integer b = a; 
		String c = Integer.toString(b); 
		System.out.println("转化后的字符串是"+c+",它来自" + c.getClass()+"类");
	}
}

基本数据类型转化为字符串

  1. 字符串类型转换为基本数据类型
public class NumberTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a = "1";
		String b ="22";
		// 字符串转化为基本数据类型
		
		//1,包装类parse
		int d = Integer.parseInt(a);
		System.out.println("String类型转化Int类型d="+d);
		//2.包装类中的valueOf, 先把包装类转化成为包装类让后再拆箱
		int c = Integer.valueOf(b);
		System.out.println("String类型转化Int类型c="+c);
	}
}

字符串类型转换为基本数据类型

5️⃣基本类型与包装类的异同

  1. 在 Java 中,一切皆对象,但八大基本类型却不是对象。
  2. 声明方式的不同,基本类型无需通过 new 关键字来创建,而 包装 类型 需 new 关键字
  3. 存储方式及位置的不同,基本类型 是直接存储变量的值保存在 栈中能高 效的存取, 包装 类型 需要通过引用指向实例,具体的实例保存在堆中。
  4. 初始值的不同, 包装 类型 的初始值为 null ,基本类型的的初始值视具体 的类型而定,比如 int 类型的初始值为 0
    boolean 类型为 false 。
  5. 使用方式的不同,比如与集合类合作使用时只能使用包装类 型

6️⃣包装类缓冲区(对象池)

public class WrapperTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer one=new Integer(100);
		Integer two=new Integer(100);
		System.out.println("one==two的结果:"+(one==two));//1
		
		Integer three=100;//自动装箱
		//Integer three=Integer.valueOf(100);
		System.out.println("three==100的结果:"+(three==100));//2 自动拆箱
		
		//Integer four=100;
		Integer four=Integer.valueOf(100);
		System.out.println("three==four的结果:"+(three==four));//3
		
		Integer five=200;
		System.out.println("five==200的结果:"+(five==200));//4
		
		Integer six=200;
		System.out.println("five==six的结果:"+(five==six));//5
		
		Double d1=Double.valueOf(100);
		System.out.println("d1==100的结果:"+(d1==100));
		
		Double d2=Double.valueOf(100);
		System.out.println("d1==d2的结果:"+(d1==d2));
	}
}

执行结果如下
包装类缓冲区(对象池)
思考:

上面代码中中"three==four"为什么会返回true?而"five==six" 以及"d1==d2" 返回的却是false。

答案:

  1. 调用valueOf(),Java为了提高效率,在这个方法执行过程中提供了对象池,如果参数在-128 ~ 127之间就可以装进这个对象池。
  2. 当给包装类赋值时,它会在对象池里先查找是否存在这样的一个对象,如果有,就会从对象池里直接产生,让现在这个对象也指向这个内存空间,如果没有,就会隐式地调用new关键字来实例化一个对象。
  3. 可以使用对象池的包装类有 Integer:Long、Short 、Byte、Character、Boolean。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值