包装类及自动装箱与拆箱

一、包装类的使用


 * 1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
 *  int Integer  
 *  float  Float   
 *  double  Double   
 *  byte  Byte             
 *  long  Long
 *  short  Short 
 *  char Character 
 *  boolean  Boolean 
 * 2.掌握:基本数据类型、包装类、String三者之间的相互转换
 * 
 */
public class WrapperTest {
    
    
	
	//String类型--->基本数据类型、包装类:调用包装类的方法:parseXxx()
	@Test
	public void test5(){
    
    
		//如果写成“123a”,则会报NumberFormatException
		String str1 = "123";
	//错误的情况:	Integer in1 = (Integer)str1; Integer和str1必须有子父类的关系
		
		
		int num2 = Integer.parseInt(str1);
		System.out.println(num2 + 1);
		
		String str2 = "true1";
		boolean b1 = Boolean.parseBoolean(str2);
		System.out.println(b1);
		
	}
	
	//基本数据类型、包装类--->String类型:调用String重载的valueof(Xxx xxx)
	@Test
	public void test4(){
    
    
		
		int num1 = 10;
		
		//方式一:连接运算
		String str1 = num1 + "";
		
		//方式二:
		float f1 = 12.3f;
		String str2 = String.valueOf(f1);
		System.out.println(str2);//"12.3"
		
		Double d1 = new Double(12.45);
		String str3 = String.valueOf(d1);
		System.out.println(str3);//"12.45"
	}
	
	/*
	 * JDK 5.0新特性:自动装箱与自动拆箱
	 */
	
	@Test
	public void test3(){
    
    
//		int num1 = 10;
		
		//基本数据类型--->包装类的对象
		
//		method(num1);
		
		//自动装箱:基本数据类型-->包装类
		int num2 = 10;
		Integer in1 = num2;
		
		boolean b1 = true;
		Boolean b2 = b1;
		
		//自动拆箱:包装类-->基本数据类型
		System.out.println(in1.toString());
		
		int num3 = in1;
		
	}
	public void method(Object object){
    
    
		System.out.println(object);
	}
	
	//包装类---->基本数据类型:调用包装类得xxxValue()
	@Test
	public void test2(){
    
    
		Integer in1 = new Integer(12);
		
		int i = in1.intValue();
		System.out.println(i);
		
		Float f1  =new Float(1.1);
		float f  = f1.floatValue();
		System.out.println(f + 1);
	}

	//基本数据类型---->包装类:调用包装类的构造器
	@Test
	public void test1(){
    
    
		
		int num1 = 10;
//		System.out.println(num1.toString());
		Integer in1 = new Integer(num1);
		System.out.println(in1.toString());
		
		Integer in2 = new Integer("123");
		System.out.println(in2.toString());
		
		//Integer in3 = new Integer("123abc");
		//System.out.println(in3.toString());
		
		Float f1 = new Float(12.3f);
		Float f2 = new Float("12.3");
		System.out.println(f1.toString());
		System.out.println(f2.toString());
		
		Boolean b1 = new Boolean(true);//true
		Boolean b2 = new Boolean("true");//true
		Boolean b3 = new Boolean("TrUe");//true
		
		Boolean b4 = new Boolean("true123");
		System.out.println(b4.toString());//false
		
		Order order = new Order();
		System.out.println(order.isMale);//false
		System.out.println(order.isFemale);//null
	}
}

class Order{
    
    
	
	boolean isMale;
	Boolean isFemale;
}

二、示例

public class InterviewTest {
    
    

	@Test
	public void test1() {
    
    
		Object o1 = true ? new Integer(1) : new Double(2.0);
		System.out.println(o1);// 1.0   编译时就已经把冒号左右两边统一成一个类型,自动提升

	}

	@Test
	public void test2() {
    
    
		Object o2;
		if (true)
			o2 = new Integer(1);
		else
			o2 = new Double(2.0);
		System.out.println(o2);// 1

	}

	@Test
	public void test3() {
    
    
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		System.out.println(i == j);// false

		// Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
		// 保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
		// -128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率,但是
		// 超出范围时就会新new一个对象,地址就不再相同

		Integer m = 1;
		Integer n = 1;
		System.out.println(m == n);// true

		
		Integer x = 128;// 相当于new了一个Integer对象
		Integer y = 128;// 相当于new了一个Integer对象
		System.out.println(x == y);// false
	}

}

猜你喜欢

转载自blog.csdn.net/xue_yun_xiang/article/details/113817974