Java面向对象编程进阶之包装类
- 一、为什么要使用包装类
- 二、掌握基本数据类型与包装类之间的转换
- 1、为什么需要转换?
- 2、如何转换?
- 三、String与基本数据类型、包装类之间的转换
- 1、案例
- 2、特别注意
一、为什么要使用包装类
为了使得基本类型的数据变量具备引用类型变量的特征(封装性、继承性、多态性),我们给各个基本数据类型的变量提供了对应的包装类。
二、掌握基本数据类型与包装类之间的转换
1、为什么需要转换?
一方面,在有些场景下,需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转化为包装类的对象。比如:ArrayList的add(Object obj);Object类的equal(Object obj)
对于包装类来讲,既然我们使用的是对象,那么对象是不能进行加减乘除等运算。为了能够进行这些运算,就需要将包装类的对象转化为基本数据的对象
2、如何转换?
(装箱)基本数据类型——》包装类 1、使用包装类的构造器;2、(建议)调用包装类的valueOf(xxx, xx)
package com.wrapper;
public class WrapperTest {
/*
基本数据类型——》包装类 1、使用包装类的构造器;2、(建议)调用包装类的valueOf(xxx, xx)
*/
public void test1() {
int i1 = 10;
Integer ii1 = new Integer(i1);
System.out.println(ii1.toString()); //10
float f1 = 12.3F;
Float ff1 = new Float(f1); //12.3
String s1 = "32.1";
Float ff2 = new Float(s1); //32.1
// String s2 = "abc";
// Float ff3 = new Float(s2); //报异常
String s3 = "false";
Boolean bb3 = new Boolean(s3); //false
String s4 = "False";
Boolean bb4 = new Boolean(s4); //false
String s5 = "False123";
Boolean bb5 = new Boolean(s5); //false
//todo 推荐使用
int i2 = 10;
Integer ii2 = Integer.valueOf(i2);
Boolean b2 = Boolean.valueOf(true);
Float f2 = Float.valueOf(12.3F);
}
}
(拆箱)包装类——》基本数据类型:调用包装类的xxxValue()
package com.wrapper;
public class WrapperTest {
//包装类——》基本数据类型
public void test3(){
}
public void test2() {
Integer ii1 = new Integer(10);
int i1 = ii1.intValue();
i1 = i1 + 1;
Float ff1 = new Float(12.4F);
float f1 = ff1.floatValue();
Boolean bb2 = Boolean.valueOf(true);
boolean b2 = bb2.booleanValue();
}
}
class Account{
boolean isFlag1;
Boolean isFlag2;
double balance1; //默认值 0.0
Double balance2; //默认值 null
}
注意:原来使用基本数据类型变量的位置,改成包装类以后,对于成员变量来说,其默认值变化了!
jdk5.0新特性:自动装箱、自动拆箱。
package com.wrapper;
public class WrapperTest {
public void test3() {
//todo 自动装箱:基本数据类型——》包装类
int i1 = 10;
Integer ii1 = i1; //自动装箱
Integer ii2 = i1 + 1; //自动装箱
Boolean bb1 = true;
//todo 自动拆箱:包装类——》基本数据类型
int i2 = ii1;
boolean b1 = bb1;
}
}
三、String与基本数据类型、包装类之间的转换
基本数据类型、包装类——》String类型:
- 调用String的重载的静态方法valueOf(xxx,xx);
- 基本数据类型的变量+“”
package com.wrapper;
public class WeapperTest1 {
/*
基本数据类型——》包装类——》调用String的重载的静态方法valueOf(xxx,xx);基本数据类型的变量+“”
包装类——》基本数据类型
*/
public static void main(String[] args) {
WeapperTest1 w = new WeapperTest1();
w.test1();
}
public void test1() {
//方式1
int i1 = 10;
String str1 = String.valueOf(i1);
System.out.println(str1); // "10"
boolean b1 = true;
String str2 = String.valueOf(b1);
System.out.println(str2);
// 方式2
String str4 = i1 + "";
String str5 = b1 + "";
}
}
String类型——》基本数据类型、调用包装类的静态方法:parseXxx()
package com.wrapper;
public class WeapperTest1 {
/*
基本数据类型——》包装类——》调用String的重载的静态方法valueOf(xxx,xx);基本数据类型的变量+“”
包装类——》基本数据类型
*/
public static void main(String[] args) {
WeapperTest1 w = new WeapperTest1();
w.test1();
w.test2();
}
//String类型——》基本数据类型、调用包装类的静态方法:parseXxx()
public void test2(){
String s1 = "123";
int i1 = Integer.parseInt(s1);
System.out.println(i1+10);
String s2 = "true";
Boolean b2 = Boolean.parseBoolean(s2);
System.out.println(b2);
//特别的
// String s3 = "123a";
// int i2 = Integer.parseInt(s3); //报错
}
}
1、案例
利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util.Vector可以根据需要动态伸缩。
1、创建Vector对象:Vector v=new Vector();
2、给向量添加元素:v.addElement(Object obj);//obj必须是对象
3、职出向量中的元素:Object obj=v.elementAt(0);注意第一个元素的下标是0,返回值是Object类型的。
4、计算向量的长度:v.size();
5、若与最高分相差10分内:A等;20分内:B等;30分内:C等;其它:D等
package com.wrapper.exer1;
import java.util.Scanner;
import java.util.Vector;
/**
* package:com.wrapper.exer1
*
* @Author jimmy-yan
* @Create 2024/11/14 15:17
*/
public class ScoreTest {
public static void main(String[] args) {
// 1、创建Vector对象 Vector v=new Vector();
Vector v = new Vector();
Scanner scanner = new Scanner(System.in);
int maxScore = 0; //记录最高分
// 2、从键盘获取多个学生成绩,存放到v中,输入负数代表结束
while (true) {
System.out.println("请输入学生成绩:");
int intScore = scanner.nextInt();
if (intScore < 0) {
break;
}
//装箱,int——》Integer对象
Integer score = Integer.valueOf(intScore);
//添加学生成绩到容器v中
v.addElement(score);
//todo 自动装箱
v.addElement(intScore);
//3、获取学生成绩的最大值
if (maxScore < intScore) {
maxScore = intScore;
}
}
//4、依次获取v中的每个学生成绩,与最高分进行比较,获取学生成绩并且输出
for (int i = 0; i < v.size(); i++) {
Object objScore = v.elementAt(i);
// Integer integerScore = (Integer) objScore;
// //拆箱
// int score = integerScore.intValue();
//自动拆箱
int score = (Integer) objScore;
char grade = ' ';
if (maxScore - score <= 10) {
grade = 'A';
} else if (maxScore - score <= 20) {
grade = 'B';
} else {
grade = 'D';
}
System.out.println("student" + i + "score is" + score + "grade is " + grade);
}
scanner.close();
}
}