包装类(封装类)是针对八种基本数据类型定义相应的引用。
让java中的基本数据类型有了类的特点和功能,就可以调用类中的方法,java才是真正的面向对象。
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| doble | Double |
| boolean | Boolean |
| char | Character |
数值型的(Byte、Short、Integer、Long、Float、Double)的父类是Number
一般源码如下:
public Integer(int value) {
this.value = value;
}
2、基本数据类型、包装类与String类型之间的转换。
1、基本数据类型和包装类的转换
基本数据类型—>包装类
import org.junit.Test;
public class Wrapper_test {
//基本数据类型--->包装类,调用包装类的构造器
@Test//注:不要造个类名为Test
public void test1(){
int num1 = 10;
//System.out.println(num.toString);//基本数据类型无法使用类的方法。
Integer int1 = new Integer(10);//放入变量为int
System.out.println(int1.toString());//10 重写了toString方法。
Integer int2 = new Integer("123");//放入变量为String (String不能包含字符,只能是数字)
System.out.println(int2.toString());//123
//数值类型的与Integer基本相同
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("true");
Boolean b3 = new Boolean("true123");
System.out.println(b1+"t"+b2+"t"+b3);//true true false
Order order = new Order();
System.out.println(order.isMale);
System.out.println(order.isFemale);//null
}
}
class Order{
boolean isMale;
Boolean isFemale;
}
包装类—>基本数据类型
//包装类--->基本数据类型:调用包装类的 XXXValue
@Test
public void test2(){
Integer int1 = new Integer(12);
int i1 = int1.intValue();
System.out.println(i1);//12
}
//其他包装类基本相同。
自动装箱与自动拆箱
@Test
public void test3(){
int num1 = 10;
//基本数据类型--->包装类的对象
method(num1);//num1是int类型的,但是可以直接当作Object类型的参数?
//自动装箱
int num2 = 10;
Integer num3 = num2;//自动装箱,不用new了,但并非将一个int类型的数据直接赋值给Object类型的数据
boolean b1 = true;
Boolean b2 = b1;//自动装箱
//自动拆箱
Integer int1 = new Integer(10);
int int2 = int1;
System.out.println(1+int1+int2);//21
}
public void method(Object obj){
System.out.println(obj);
}
2、基本数据类型、包装类与String类型的相互转换
基本数据类型,包装类---->String类型
//基本数据类型,包装类---->String类型:请用String重载的valueOf(XXX XXX)
@Test
public void test4(){
//方式1:连接运算
int num1 = 10;
String str1 = num1+"";//其他数据类型也一样
//方式2:调用String类型的 valueOf() 方法
float f1 = 12.3f;
String str2 = String.valueOf(f1);//"12.3"
Double d1 = new Double(122.4);
String str3 = String.valueOf(d1);//"122.4"
System.out.println(str2);
System.out.println(str3);
}
String类型 —>基本数据类型,包装类
//String类型 --->基本数据类型,包装类:调用包装类的parseXXX()方法
@Test
public void test5(){
String str1 = "123";
//int num1 = (int)str1;
//Integer int1 = (Integer)str1;//无法使用强制类型转换,以上两个都是错误的情况
//在转换过程中,除了boolean比较特殊,都有可能报错NumberFormatException
Integer num1 = Integer.parseInt(str1);
System.out.println(num1+1);//124
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);//true
}
【注】:
1、基本数据类型和包装类之间有自动装箱自动拆箱
2、基本数据类型、包装类---->String类型:valueOf( )
String类型----->基本数据类型:parseXXX
3、包装类常见面试题
例1:如下两个题目输出的结果相同吗?各是什么?
Object o1 = true ? new Integer(1):new Double(2.0);//三目运算符“:”两边的数据类型尽量统一成一个数据类型,int类型向double转换,所以结果为1.0。 System.out.println(o1);//1.0
1.0
Object o2; if(true) o2 = new Integer(1); else o2 = new Double(2.0); System.out.println(o2);
1
例2:输出什么?为什么?
@Test
public void method1() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//i和j都是引用数据类型,比较的是地址,故为false
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//自动装箱
Integer x = 128;
Integer y = 128;//相当于new了一个Integer对象
System.out.println(x == y);//false
// Integer内部定义了 Integercache结构, Integercache中定义了 Integer[],
//保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
//-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率。
}
false
true
false
利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出
最高分,并输出学生成绩等级。
- 提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util.Vector可以根据需要动态伸缩。
- 创建Vector对象:Vector v=new Vector();
- 给向量添加元素:v.addElement(Object obj); //obj必须是对象
- 取出向量中的元素:Object obj=v.elementAt(0);
注意第一个元素的下标是0,返回值是Object类型的。 - 计算向量的长度:v.size();
- 若与最高分相差10分内:A等;20分内:B等;
30分内:C等;其它:D等
import java.util.Scanner;
import java.util.Vector;
public class ScoreTest {
public static void main(String[] args) {
//1、实例化Scanner,用于从键盘获取学生成绩。
Scanner sc = new Scanner(System.in);
//2、创建Vector对象:Vector v=new Vector();相当于原来的数组
Vector v=new Vector();
int maxScore =0;
//3、通过for(;;)或while(true)循环的方式,给Vector中添加数组。
for(;;){
System.out.println("请输入学生的成绩(以负数代表输入结束)");
int score = sc.nextInt();
//3.1、添加操作:v.addElement(Object obj);
if(score < 0){//3.2、当输入是负数时,跳出循环
break;
}
if(score > 100){
System.out.println("输入的数据非法,请重新输入!");
continue;
}
// //jdk5.0之前
// Integer inScore = new Integer(score);
// v.addElement(inScore);
//jdk5.0之后
v.addElement(score);//自动装箱
//4、获取学生成绩的最大值
if(maxScore < score){
maxScore=score;
}
}
//遍历Vertor,得到每个学生的成绩,并与最大成绩比较,得到每个学生的等级。
char level;
for(int i = 0;i
请输入学生的成绩(以负数代表输入结束)
66
请输入学生的成绩(以负数代表输入结束)
55
请输入学生的成绩(以负数代表输入结束)
44
请输入学生的成绩(以负数代表输入结束)
1
请输入学生的成绩(以负数代表输入结束)
15
请输入学生的成绩(以负数代表输入结束)
89
请输入学生的成绩(以负数代表输入结束)
-1
Student -0score is 66,level isC
Student -1score is 55,level isD
Student -2score is 44,level isD
Student -3score is 1,level isD
Student -4score is 15,level isD
Student -5score is 89,level isA



