java工具类 ~ 包装类(包装类与基本数据类型的转换、基本数据类型与字符串之间的转换)

为什么要使用包装类??

java数据类型分为 基本数据类型、引用数据类型。其中基本数据类型是不具备对象的特征(不能像普通对象一样拥有属性和方法,并且不能进行对象化交互),因此包装类就是为了能让基本数据类型能够像对象一样 拥有属性、方法、以及可以对象化交互。(java包装类都是在java . lang包中的)

**包装类 与 基本数据类型 之间的对应关系**

java工具类 ~ 包装类(包装类与基本数据类型的转换、基本数据类型与字符串之间的转换)java工具类 ~ 包装类(包装类与基本数据类型的转换、基本数据类型与字符串之间的转换)

 

 

public class WrapTest {
	public static void main(String[] args) {

		//装箱:把基本数据类型转换成包装类
		//1、自动装箱
		int t1=2;
		Integer t2=t1;//编译器,将t1中的数据提取出来,通过实例化的方式来构成t2对象。
		//2、手动装箱
		Integer t3=new Integer(t1);//通过new关键字,在构造函数中可以将t1的值传给t3.
		
		//测试
		System.out.println("int类型变量t1="+t1);
		System.out.println("Integer类型对象t2="+t2);
		System.out.println("Integer类型对象t3="+t3);//Integer对象直接调用toString返回t3的值
		System.out.println("*************************");


		//拆箱:把包装类转换成基本数据类型
		//1、自动拆箱
		int t4=t2;//编译器直接将t2对象中的值提取出来,赋值给t4
		//2、手动拆箱
		int t5=t2.intValue();//调用intValue()方法,将对象中的数据取出赋值给t5

		//测试
		System.out.println("Integer类型对象t2="+t2);
		System.out.println("自动拆箱后,int类型变量t4="+t4);
		System.out.println("手动拆箱后,int类型变量t5="+t5);
		double t6=t2.doubleValue();
		System.out.println("手动拆箱后,double类型变量t6="+t6);
	}
}

【注意】:Boolean、Character包装类继承Object类,其余均继承Number类;

 

**基本数据类型 与 字符串(包装类) 之间的转换**

public class WrapTest {

	public static void main(String[] args) {
		//基本数据类型转换为字符串
		int t1=2;
		String t2=Integer.toString(t1);//将整型转换为字符串
		//测试
		System.out.println("int类型转换为String类型对象t2="+t2);
		System.out.println("********************************");

		//字符串转换为基本数据类型
		//方式1、包装类的parse方法实现
		int t3=Integer.parseInt(t2);
		//方式2、包装类的valueOf方法 :先将字符串转换为包装类,再通过自动拆箱完成基本类型转换
		int t4=Integer.valueOf(t2);
		//测试
		System.out.println("String类型转换为int类型变量t3="+t3);
		System.out.println("String类型转换为int类型变量t4="+t4);
		
	}
}

【补充知识】:

  • 包装类对象 的初始值;

java工具类 ~ 包装类(包装类与基本数据类型的转换、基本数据类型与字符串之间的转换)       所有数据类型的包装类 初始值均为:null

  • 包装类对象 之间的比较;
public class WrapperTest {

	public static void main(String[] args) {

        //1、
		Integer one=new Integer(100);
		Integer two=new Integer(100);
		System.out.println("one==two的结果:"+(one==two));
		//false,“==”两边均为对象时,比较的是两个对象的引用(内存地址);
		
        //2、
		Integer three=100;//自动装箱,~~ 约等于操作:Integer three=Integer.valueOf(100);
		System.out.println("three==100的结果:"+(three==100));
		//true,这里完成的是 自动拆箱 操作,自动拆箱是取出其值然后比较;
		
        //3、
		Integer four=100;//自动装箱,创建第4个对象 
        //~~ 约等于操作:Integer four=Integer.valueOf(100);
		System.out.println("three==four的结果:"+(three==four));
		//true,java为了提高执行valueOf方法的效率,会自动提供一个常量数组的“缓存区(对象池)”,
		//当执行Integer.valueOf(100)方法时,-128<参数(100)<127时,直接从缓存区查找是否有符合的对象,
		//如果存在,则直接产生;如果没有,则通过new Integer(100)新生成一个对象

        //4、
		Integer five=200;
		System.out.println("five==200的结果:"+(five==200));//true
		
        //5、
		Integer six=200;
		System.out.println("five==six的结果:"+(five==six));//false,200已经超过了127,所以直接new一个新的对象
		
        //6、
		Double d1=Double.valueOf(100);
		System.out.println("d1==100的结果:"+(d1==100));//true,拆箱操作,比较的是数值
		
        //7、
		Double d2=Double.valueOf(100);
		System.out.println("d1==d2的结果:"+(d1==d2));//false,因为double、float不能应用常量池这个概念
	}
}

【注意】:除了float、double,其他都可以应用对象常量池概念;