JAVA 包装类

2023-05-16

1.概念

        Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

        各数据类型对应的包装类

 这里除了int (包装类为Integer)和char(包装类为Character)外,其他数据类型的包装类型都是自己的首字母大写,所有记忆起来会比较容易。

 包装类的主要用途有两种:
a、作为基本数据类型对应的类存在,方便有关对象的操作
b、可以用设定每种基本数据类型的属性大小及使用方法

2.包装类的使用 

        装箱和拆箱

        int 和 Integer的转换(这里我们介绍一种包装类,其他的用法一样 )

public class Test2 {
    public static void main(String[] args) {
        int score=666;
        Integer score1 = new Integer(score);
        System.out.println("score对应的Integer类型结果为:" + score1);

        Integer a=new Integer(1230);
        int i=a.intValue();
        System.out.println("由Integer类型转换为int类型的结果为:" + i);
    }
}

注意: DK自从1.5版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行

 例如:

public class Test2 {
    public static void main(String[] args) {
        Integer score1 = 666;//自动装箱
        System.out.println("score对应的Integer类型结果为:" + score1);

        int i=score1;//自动拆箱
        System.out.println("由Integer类型转换为int类型的结果为:" + i);
    }
}

3.基本数据类型和字符串类型之间的转化

基本数据类型转换为字符串类型方法:

        1.基本类型直接与""相连接即可实现转换,如:66+"";

        double a=12.5;
        System.out.println(a+"");//12.5
        System.out.println(a+""+10);//12.510

        2.先转换为包装类型,然后调用toString方法

        double a=12.5;
        String a1=Double.toString(a);//这里先转换为Double类型,然后调用toString方法
        System.out.println(a1);//12.5
        System.out.println(a1+66);//12.566

        3. 使用String的静态方法valueof转换

        double a=12.5;
        String a1=String.valueOf(a);//使用String的valuOf方法
        System.out.println(a1+88);//12.588

字符串类型转换为基本数据类型方法:

 除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:

        String str="2.8";
        Double str1=Double.parseDouble(str);
        System.out.println("str 转换为double型后+10的结果为:"+(str1+10));//12.8

 其他基本类型的包装类都类似以上用法

注意:当你将字符串类型转换为基本数据类型后在输出里面操作并且有引号打注释的时要注意,如上图代码,如果没有加括号,转换后的基本数据类型检测到  " "  符号的时候又会自动转换成字符串类型。

验证如下:

        String str="2.8";
        Double str1=Double.parseDouble(str);
        System.out.println("str 转换为double型后+10的结果为:"+str1+10);
        System.out.println("str 转换为double型后+10的结果为:"+(str1+10));

4.使用包装类时要注意的问题

包装类的缓存范围

boolean:true和false 
byte:-128~127 
char:0~127 
short:-128~127 
int:-128~127 
long:-128~127 

 特别注意:对于float和double没有缓存。

大家来看一个例子:

        Integer num1 = 200;
        Integer num2 = 200;
        System.out.println("num1==num2: "+(num1==num2));
        Integer num3 = 100;
        Integer num4 = 100;
        System.out.println("num3==num4: "+(num3==num4));

这段代码看一下输出结果是多少?一般人会认为都是true

结果为

这是为什么呢?

 因为在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象,而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都重建一个 Integer对象,所有会返回false。

5.包装后的类型和原数据类型有什么区别呢? 

拿Int 和Integer来说

一、int 是基本类型,直接存数值;而integer引用数据类型。
二、Int的声明不需要实例化,且变量声明后的初始值为0;Integer的是一个类,初始值为null,需要进行实例化,才能对变量数据进行处理。
三、Integer类是int的包装类,实际开发中Integer被看成一个对象,可以进行数据转换等操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 包装类 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后

随机推荐