学习任务:

视频学习包装类自动拆装箱

动手测试包装类自动拆装箱

动手测试包装类非空判断

首先测试下边的代码是否报错:

package com.pbteach.javase.oop.api.wrapperclass;

/**
 * Integer测试
 * @author 攀博课堂
 * @version v1.0
 */
public class IntegerTest {
	
	//构造Integer对象
	public static void test1() {
		Integer a = new Integer(100);
		Integer b = new Integer("100");
		System.out.println(a);
		System.out.println(b);
		
	}

	//字符串与Integer转换
	public static void test2() {
		String str = "100";
		//字符串转成Integer
		Integer a =  new Integer(str);
		//或
		Integer b = Integer.valueOf(str);
		
		//得到Integer的value值
		int intValue = b.intValue();
		System.out.println(intValue);
		
		int c = Integer.parseInt(str);
		System.out.println(c);
	}
	
	/**
	 * 
	 * 自动拆装箱测试
	 * @author 攀博课堂
	 * @version v1.0
	 */
	public static void test3() {
		//把int赋值给Integer
		Integer a = 100;
		//直接对Integer引用加1
		a++;
		System.out.println(a);
	}
	public static void main(String[] args) {
		test3();
	}

}

输出:

101

输出结果达到我们的预期,不过根据我们所学的知识分析是有问题的,a是一个引用类型是不可以将100赋值给它的, 那为什么没有报错呢?

Java对包装类型进行的特殊处理,Jdk1.5以后推出的一个新特性:自动拆装箱。

自动拆装箱包含两个操作:自动装箱和自动拆箱

自动装箱:把基本数据类型转换为对应的包装类类型

自动拆箱:把包装类类型转换为对应的基本数据类型

测试代码如下:

package com.pbteach.javase.oop.api.wrapperclass;

/**
 * Integer测试
 * @author 攀博课堂
 * @version v1.0
 */
public class IntegerTest {
	
	//构造Integer对象
	public static void test1() {
		Integer a = new Integer(100);
		Integer b = new Integer("100");
		System.out.println(a);
		System.out.println(b);
		
	}

	//字符串与Integer转换
	public static void test2() {
		String str = "100";
		//字符串转成Integer
		Integer a =  new Integer(str);
		//或
		Integer b = Integer.valueOf(str);
		
		//得到Integer的value值
		int intValue = b.intValue();
		System.out.println(intValue);
		
		int c = Integer.parseInt(str);
		System.out.println(c);
	}
	
	/**
	 * 
	 * 自动拆装箱测试
	 * @author 攀博课堂
	 * @version v1.0
	 */
	public static void test3() {
		//把基本数据类型转换为对应的包装类类型
		Integer a = 100;
		//把包装类类型转换为对应的基本数据类型
		a++;
		System.out.println(a);
	}
	public static void main(String[] args) {
		test3();
	}

}

输出:

101

如果Integer的值为null表示值为空,此时不能进行算术运算,测试代码如下:

/**
	 * 
	 * 自动拆装箱测试
	 * @author 攀博课堂
	 * @version v1.0
	 */
	public static void test3() {
		//把基本数据类型转换为对应的包装类类型
		Integer a = 100;
		//把包装类类型转换为对应的基本数据类型
		a++;
		System.out.println(a);
		
		Integer b= null;
		//执行a+b
		System.out.println(add(a,b));
	}
	//注意非空判断
	public static int add(Integer a,Integer b) {
		return a+b;
	}
	public static void main(String[] args) {
		test3();
	}

报错:

101
Exception in thread "main" java.lang.NullPointerException
	at com.pbteach.javase.oop.api.wrapperclass.IntegerTest.add(IntegerTest.java:54)
	at com.pbteach.javase.oop.api.wrapperclass.IntegerTest.test3(IntegerTest.java:50)
	at com.pbteach.javase.oop.api.wrapperclass.IntegerTest.main(IntegerTest.java:57)

所以在对包装类型进行操作时建议进行非空判断,代码如下:

/**
	 * 
	 * 自动拆装箱测试
	 * @author 攀博课堂
	 * @version v1.0
	 */
	public static void test3() {
		//把基本数据类型转换为对应的包装类类型
		Integer a = 100;
		//把包装类类型转换为对应的基本数据类型
		a++;
		System.out.println(a);
		
		Integer b= null;
		//执行a+b
		System.out.println(add(a,b));
	}
	//注意非空判断
	public static Integer add(Integer a,Integer b) {
		if(a!=null && b!=null) {
			return a+b;
		}
		return null;
	}
	public static void main(String[] args) {
		test3();
	}
提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题