当前位置: 首页 > article >正文

Java面向对象编程进阶之包装类

在这里插入图片描述


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();

    }
}

2、特别注意

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/393379.html

相关文章:

  • 游戏开发-UE4高清虚幻引擎教程
  • WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框
  • 【只生一个好 - 单例设计模式(Singleton Pattern)】
  • 单例模式懒汉式、饿汉式(线程安全)
  • 『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释
  • elasticsearch 杂记
  • Python---re模块(正则表达式)
  • 快递鸟快递查询API接口参数代码
  • 字符设备 - The most important !
  • JavaScript 中实例化生成对象的相关探讨
  • JVM 中的完整 GC 流程
  • 电信网关配置管理后台 upload_channels.php 任意文件上传漏洞复现
  • IntelliJ IDEA设置打开文件tab窗口多行展示
  • 使用Cesium for Unreal与Cesium ion构建3D地理空间应用教程
  • PHP运算符
  • 使用React和Vite构建一个AirBnb Experiences克隆网站
  • 父子线程间传值问题以及在子线程或者异步情况下使用RequestContextHolder.getRequestAttributes()的注意事项和解决办法
  • 数据分析——学习框架
  • Overleaf数学符号乱码等问题
  • ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案
  • 10 Oracle Data Guard:打造高可用性与灾难恢复解决方案,确保业务连续性
  • Sql server 备份还原方法
  • 鸿蒙系统(HarmonyOS)介绍
  • CISSP首战失利与二战逆袭
  • 【debug记录】MATLAB内置reshape与Python NumPy库reshape的差异
  • Python虚拟环境入门:虚拟环境如何工作、如何自定义创建和管理管理工具venv、Virtualenv、conda