自动装箱自动拆箱概念
先看代码:
int num = 10;//自动装箱
Integer in = num;
int i = in;//自动拆箱
in是个对象,num、i是int型的变量,如果直接赋值按理说会报错,但是由于自动装箱和自动拆箱的存在,上述语句可执行。
简单来说,自动装箱就是基本数据类型到包装类的转换不再需要调用包装类的构造器。
同理我们可以知道,自动拆箱是自动装箱的逆过程,也就是说,我们也可以通过上述最后一条语句直接完成包装类到基本数据类型的转换。
package com.crz.java3;
import java.util.Scanner;
import java.util.Vector;
/*
* 从键盘输入学生成绩,输出最高分以及学生成绩等级
* 采用Vector代替数组实现
*
* 练习一下自动装箱拆箱与包装类的使用以及实现
*/
public class VectorTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Vector v = new Vector();
int maxScore = 0 ;
for(;;){
System.out.println("输入学生成绩,输入-1结束程序");
int score = scan.nextInt();//获取数据
if (score < 0){
break;
}
if (score > 100){
System.out.println("输入非法,重新输入");
continue;
}
/*
* Integer inScore = new Integer(score);
* // addElement()方法形参是对象,所以需要使用包装类
* v.addElement(inScore);// 添加数据
*/
v.addElement(score);
/*
* 本条语句和上面注释掉的语句功能一样,
* 原因是自动装箱就没有必要自己进行包装类构造器的调用
* */
if (maxScore < score){
maxScore = score;
}
}
char level ; //学生成绩等级
for(int i = 0 ; i < v.size(); i++ ){
Object obj = v.elementAt(i);//elementAt方法获取数值
/*
* Integer inScore1 = (Integer)obj;
*
* int score1 = inScore1.intValue();
* // 将包装类转变为基本数据类型
*/
int score1 =(int)obj;//自动拆箱,与上面被注释掉的两行代码功能一致
if (maxScore - score1 <= 10){
level = 'A';
}else if(maxScore - score1 <= 20){
level = 'B';
}else if(maxScore - score1 <= 30){
level = 'C';
}else {
level = 'D';
}
int j = i+1;
System.out.println("学生:" + j + " 成绩是"
+ score1 + "等级是" + level);
}
}
}