Java基础——包装类

这篇博客介绍了Java中的包装类,包括它们的使用,如基本数据类型、包装类与String之间的相互转换。重点讲解了JDK5.0后的自动装箱和拆箱特性,并探讨了Integer类内部的IntegerCache结构,揭示了-128到127之间Integer对象的缓存机制,旨在帮助理解Java中包装类的高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

包装类

1. 包装类的使用:

Java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
在这里插入图片描述


2. 基本数据类型、包装类、String三者之间的相互转换

在这里插入图片描述
注:【实际上JDK5.0以后有了自动装箱、自动拆箱功能后,基本数据类型和包装类可以合二为一,二者在实际开发过程中可以看作是一种东西】

实例:

import java.util.Scanner;
import java.util.Vector;
import org.junit.Test;


/*
 * 包装类的使用:
 * 
 * 1. Java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
 * 
 * 2. 基本数据类型、包装类、String三者之间的相互转换
 */
public class WrapperTest {
	//基本数据类型--->包装类:调用包装类的构造器
	//【有些方法的形参是引用类型,比如Object类型,就需要把基本数据类型转化为包装类,再传参】
	@Test
	public void test1(){
		int num1 = 10;
		Integer in1 = new Integer(num1);
		System.out.println(in1.toString());
		
		Integer in2 = new Integer("234"); //注意,该字符串内容必须是纯粹的数,不能是"123abc"
		System.out.println(in2.toString());
		
		Boolean b1 = new Boolean(true);
		Boolean b2 = new Boolean("true");
		Boolean b3 = new Boolean("true123"); //这里不同于其他类型,不报异常,而是输出false
		System.out.println(b3);
	}

	@Test
	public void test2(){
		Integer in1 = new Integer(10);
		int num1 = in1.intValue();
		System.out.println(num1 + 1);
		
		Boolean b1 = new Boolean(true);
		boolean flag = b1.booleanValue();
		System.out.println(flag);
	}

	//JDK5.0新增新特性:自动装箱与自动拆箱
	//【包装类和基本数据类型之间的转换,十分常用,因此增加自动装箱拆箱,使得二者的转化过程更加平滑(隐藏了复杂过程)】
	//【有了自动装箱与拆箱技术后,基本数据类型 和 包装类 就可以看成一个东西了】
	@Test
	public void test3(){
		//自动装箱:基本数据类型--->包装类
		int num1 = 10;
		Integer in1 = num1;
		
		boolean b1 = true;
		Boolean flag = b1;
		
		//自动拆箱:包装类--->基本数据类型
		int num2 = in1;
	}

	//基本数据类型、包装类--->String类型:调用String中重载的valueOf(Xxx xxx)方法
	//【转化成谁,就去谁里面找方法】
	@Test
	public void test4(){
		//方式一:连接运算
		int num1 = 10;
		String str1 = num1 + "";
		
		//方式二:调用String的valueOf()方法
		float f1 = 12.3F;
		String str2 = String.valueOf(f1); //"12.3"
		
		Double d1 = new Double(22.4);
		String str3 = String.valueOf(d1); //"22.4"
	}
	//包装类--->基本数据类型:调用包装类的xxxValue
	//【包装类作为引用类型,是不能进行加减乘除运算的,因此需要转化回基本数据类型,才能运算】

	//String类型--->基本数据类型、包装类:调用包装类的parseXxx()方法
	@Test
	public void test5(){
		String str1 = "123";
		int num1 = Integer.valueOf(str1);
		
		int num2 = Integer.parseInt(str1);
		
		String str2 = "true";
		boolean b1 = Boolean.parseBoolean(str2);
		System.out.println(b1);
	}
}

3. 面试题

知识点:

  • 包装类 Integer 内部定义了IntegerCache结构,其中定义了一个Integer[]数组,保存了常用的整数[-128, 127],方便使用,(因为很常用,所以就别每次新创建、销毁这么麻烦了,提前加载好就是);
  • 因此,如果我们使用自动装箱的方式(即,不是new的),给Integer赋值的范围在-128~127范围内,就可以直接使用数组中的元素,不用再new了;超出这个范围的数,则按正常流程去new一个Integer对象;
//面试题:
@Test
public void interviewTest(){
	//面试题1:
	Object o1 = true ? new Integer(1) : new Double(2.0);
	System.out.println(o1); //1.0
	//【三目运算符,在编译的时候,就要对前后两个变量进行类型统一,就会进行类型提升】
	
	Object o2;
	if(true){
		o2 = new Integer(1);
	}else{
		o2 = new Double(2.0);
	}
	System.out.println(o2);
	
	//面试题2:
	Integer in1 = 1;
	Integer in2 = 1;
	Integer a = 128;
	Integer b = 128;
	System.out.println(in1 == in2); //true
	System.out.println(a == b); //false
	//Integer内部定义了IntegerCache结构,其中定义了一个Integer[]数组,保存了常用的整数[-128, 127],方便使用
	//(因为很常用,所以就别每次新创建、销毁这么麻烦了,提前加载好就是)
	//因此,如果我们使用自动装箱的方式(即,不是new的),给Integer赋值的范围在-128~127范围内,就可以直接使用数组中的元素,不用再new了
	//超出这个范围的数,则按正常流程去new一个Integer对象
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值