栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包装类Wrapper(封装类)的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包装类Wrapper(封装类)的使用

包装类Wrapper(封装类)的使用

包装类(封装类)是针对八种基本数据类型定义相应的引用。
让java中的基本数据类型有了类的特点和功能,就可以调用类中的方法,java才是真正的面向对象。

1、java提供了8种数据类型对应的包装类,使得基本数据类型的变量具有类的特征
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
dobleDouble
booleanBoolean
charCharacter

数值型的(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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号