包装类



​ 在java中, 系统为每一个基本类型都提供 了 一个对应的包装类型

基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

包装类在java.lang包中


![img](file:///C:/Users/yufan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)


为什么提供包装类?

为了编程方便


包装类对象的创建(构造方法)

1.Java会把这些基本类型数据自动转换为包装类对象

public static void m1(Object obj) {

}

public static void main(String[] args) {
		m1(true);
		m1(456);
		m1(3.14);
		m1("abc");
		/*
		 * 不能直接把基本类型数据赋值给引用类型变量
		 * 当前程序没有语法错误,是因为Java把这些基本类型数据自动转换为了包装类对象, 再把包装 类对象传递给obj形参
		 */
}

2.包装类的用法

		//1)根据基本类型创建包装类对象
		Boolean  boolean1 = new Boolean(true);
		short s = 123;
		Short short1 = new Short(s);
		Integer integer1 = new Integer(78945);
		Double  double1 = new Double(3.14);
		Character character1 = new Character('a');
		
		//2)根据字符串创建包装类对象
		boolean1 = new Boolean("true");
		integer1 = new Integer("456");
		double1 = new Double("45.789");
		//注意1: 字符串的格式要符合数字的格式
//		integer1 = new Integer("aa");   //java.lang.NumberFormatException
		double1 = new Double("23e3");	//科学计数法
		System.out.println(double1);		//23000.0
		//注意2: 布尔类型的包装类把"true"字符串转换为true, 其他的字符串都转换为false
		boolean1 = new Boolean("adfasfaslf");
		System.out.println( boolean1 );
		//注意3: Character包装类只有一个构造方法
//		character1 = new Character("A");
		
		//3)输出常用字段
		System.out.println( Integer.BYTES); 			//字节数, 4
		System.out.println( Integer.SIZE);				//位数:  32
		System.out.println( Integer.TYPE);				//基本类型 : int
		System.out.println( Integer.MIN_VALUE);
		System.out.println( Integer.MAX_VALUE);


包装类的基本操作

		Integer i1 = new Integer(123);
		Integer i2 = new Integer("456");
		
		//1)从Number继承的 方法, 可以把包装类对象转换为基本类型数据
		byte bb = i1.byteValue();
		double dd = i2.doubleValue();
		
		//2)包装类实现了Comparable接口,重写了compareTo()方法, 根据包装类的value字段比较大小
		//每个包装类都有一个value字段,保存对应基本类型的数据
		System.out.println( i1.compareTo(i2) ); 		//-1
		Character c1 = new Character('A');
		Character c2 = new Character('a');
		System.out.println( c1.compareTo(c2));  		//-32
		Boolean b1 = new Boolean(true);
		Boolean b2 = new Boolean(false);
		System.out.println( b1.compareTo(b2));  		//1
		
		//3)equals(), 根据value字段进行判断是否相等
		System.out.println( i1.equals(i2));
		
		//4) static int parseInt(String s)   可以把字符串转换为基本类型数据, 经常用
		int num = Integer.parseInt("789");  	
		dd = Double.parseDouble("45.78");

		//注意, 字符串要符合数字格式
		num = Integer.parseInt("adf");  //java.lang.NumberFormatException
		
		//5)valueOf() 把基本类型/字符串转换为包装类对象
		i1 = Integer.valueOf(369);
		i2 = Integer.valueOf("258");


装箱与拆箱

  • 装箱:

    把基本类型转换为包装类对象

  • 拆箱:

    把包装类对象转换为基本类型


		Integer i1 = 147; 		//自动装箱
		int num = i1; 			//自动拆箱
		
		Integer i2 = 666; 		//根据基本类型数据666创建了一个包装类对象, 把这个包装类对象的引用赋值给i2
		Integer i3 = 666;		//重新创建了一个包装类对象
		System.out.println( i2.equals(i3));  	//true
		System.out.println( i2 == i3 ); 		//false
		
		Integer i4 = 77;
		Integer i5 = 77;
		System.out.println( i4 == i5 ); 		//true
		/*
		 * Java认为-128~127之间的整数使用最频繁, 所以这个范围内整数创建的包装类对象采用享元模式 , 即把包装类对象存储到共享池中
		 * 在执行 i4 = 77时, 系统根据77创建一个Integer对象, 把该对象存储到共享池中
		 * 当执行i5 = 77时, 系统直接把共享池中的Integer对象的引用赋值给i5
		 */
		
		Long gg1 = 15L;
		Long gg2 = 15L;
		System.out.println( gg1 == gg2 ); 		//true
原文地址:https://www.cnblogs.com/huochemeiyouhuo/p/12534038.html