首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Java常用类——包装类 小白版个人推荐

编程知识
2024年08月19日 21:56

包装类及自动装箱/拆箱

包装类是将Java中的八种基本数据类型封装成的类,所有数据类型都能很方便地与对应的包装类相互转换,以解决应用中要求使用数据类型,而不能使用基本数据类型的情况。

int a = 10; //基本类型的数据
Integer b = new Integer(10); //包装类表示的数据

包装类的特点

  • 所有包装类都是final类型(不能派生子类);
  • 实例化包装类对象后,对象中保存的基本类型数据不能再改变;
  • 包装类封装大量有用的方法(如数据类型转换、判断大小写、最大值、最小值等);
  • 除Character类和Boolean类继承于Object类,其他的包装类都继承于Number类。

基本数据类型和包装类

基本数据类型 包装类
boolean Boolean类
byte Byte类
short Short类
int Integer类
long Long类
char Charactor类
float Float类
double Double类

包装类的共同点

  1. 包装类中包含的值不改变( 包装类实例化后不能修改保存的值 );
  2. 包装类有两个构造器
    • Integer(int value) ---指定int值的构造对象
    • Integer(String s) ---指定String值的构造对象
  3. 包装类中都有xxxValue()方法
    • int intValue() ---返回包装类对象的int值
    • float floatValue() ---返回包装类对象的float值
  4. 包装类中都有两个ValueOf()方法
    • static Integer valueOf(int i) ---指定int值的Integer实例
    • static Integer valueOf(String s) ---指定String值的Integer实例

自动装箱和拆箱

自动装箱和自动拆箱是基本数据类型与包装类之间的转换机制(通过编译器自动完成)
基本数据类型 ---自动装箱--->包装类;
包装类 ---自动拆箱 --->基本数据类型。
例:以int类型和Integer类型为例

public class Test01 {
    public static void main(String[] args) {
        // 自动装箱 int -> Integer
        int i = 10;
        Integer integer1 = i;
        System.out.println(integer1);

        //自动拆箱 Integer -> int
        int j = 20;
        Integer integer2=j;
        int k = integer2;
        System.out.println(j);
    }
}

包装类型和String类型的相互转换

例:以 Integer 和 String 为例

public class Test03 {
    public static void main(String[] args) {
        //包装类Integer -> String
        Integer i = 100; //自动装箱
        //方式1
        String str1 = i+"";
        //方式2 调用Integer的toString()方法
        String str2 = i.toString();
        //方式3 调用静态方法String.valueOf()
        String str3 =String.valueOf(i);

        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);

        //String -> 包装类Integer
        String str4 = "123";
        //方式1 调用包装类的parseXXX()方法
        Integer i2 = Integer.parseInt(str4);//自动拆箱
        //方式2
        Integer i3 = new Integer(str4); //构造器

        System.out.println(i2);
        System.out.println(i3);

    }
}

例题1:
以下两个题目输出结果相同吗?为什么?

Object obj1 = true?new Integer(1):new Double(2.0); //三元运算符(是一个整体)
System.out.println(obj1);
//运行结果 
// 三元运算符是一个整体,精度最高的是double,所以结果是1.0
1.0
Object obj2;
if(true){
    obj2 = new Integer(1);
}else{
    obj2 = new Double(2.0);
}
System.out.println(obj2);
//运行结果
//if、else是分别独立的语句,是什么输出什么
1

例题2(Integer类):

public class Test04 {
    public static void main(String[] args) {
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
        System.out.println(i1 == i2); // false (判断i1和i2是否指向同一个对象)
        System.out.println(i1.equals(i2)); // true

        Integer j1 = 20; //底层 Integer.valueOf(20) {-128~127}直接返回对象引用,否则创建新的对象new Integer()
        Integer j2 = 20; //底层 Integer.valueOf(20)
        System.out.println(j1 == j2); // true

        Integer k1 = 128; //超出{-128~127}范围,创建新的对象new Integer()
        Integer k2 = 128;
        System.out.println(k1 == k2); // false (判断k1和k2是否指向同一个对象)
    }
}

例题3(Integer):

public class Test05 {
    public static void main(String[] args) {
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2); // false i1和i2是两个不同的对象

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4); // false  i3和i4是两个不同的对象

        Integer i5 = 127;  //底层Integer.valueOf(127)
        Integer i6 = 127;
        System.out.println(i5 == i6); // true

        Integer i7 = 128;  //底层new Integer(128)
        Integer i8 = 128;
        System.out.println(i7 == i8); // false 同i3和i4

        Integer i9 = 127;
        Integer i10 = new Integer(127);
        System.out.println(i9 == i10); // false

        int a1 = 127;
        Integer b1 = 127;
        System.out.println(a1 == b1); // true  只要有基本数据类型,判断的是值是否相等,不管是int还是Integer

        int a2 = 128;
        Integer b2 = 128;
        System.out.println(a2 == b2); // true 同上

    }
}

如有错误,请大家批评指正,共同进步。

From:https://www.cnblogs.com/wmshun/p/18368279
本文地址: http://www.shuzixingkong.net/article/1245
0评论
提交 加载更多评论
其他文章 面试场景题:一次关于线程池使用场景的讨论。
你好呀,我是歪歪。 来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。 问题是这样的: 字有点多,我直接给你上个图你就懂了: 前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需要调用多个下游接口拿到数据进行整合。
面试场景题:一次关于线程池使用场景的讨论。 面试场景题:一次关于线程池使用场景的讨论。 面试场景题:一次关于线程池使用场景的讨论。
Python 加载 TensorFlow 模型
TensorFlow支持多种模型格式,但最常见的两种是SavedModel和HDF5(对于Keras模型),本文简要介绍了TensorFlow中最常见的两种是SavedModel和HDF5的模型,并给出了详细的代码示例。
Elsa V3学习之Flowchart详解(上)
前面我们通过界面学习了Elsa的一些基本使用,若是有实操的小伙伴们,应该可以发现,我们工作流定义中的root,既我们的工作流画布其实也是一个activity,就是Flowchart。那么本文将来解读以下flowchart的执行逻辑。 Flowchart源码 为了方便大家,这里先直接把flowchar
Elsa V3学习之Flowchart详解(上) Elsa V3学习之Flowchart详解(上)
《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储
⭐️基础链接导航⭐️ ☁️ 阿里云活动地址 🐟 上班摸鱼小网站地址 💻 源码库地址 一、前言 大家好呀,我是summo,第一篇已经教会大家怎么去阿里云买服务器,以及怎么搭建JDK、Redis、MySQL这些环境。第二篇我们把后端的应用搭建好了,并且完成了第一个爬虫(抖
《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储 《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储 《花100块做个摸鱼小网站! 》第三篇—热搜表结构设计和热搜数据存储
ollama搭建本地ai大模型并应用调用
1、下载ollama 1)https://ollama.com 进入网址,点击download下载2)下载后直接安装即可。 2、启动配置模型 默认是启动cmd窗口直接输入 1 ollama run llama3 启动llama3大模型 或者启动千问大模型 1 ollama run
ollama搭建本地ai大模型并应用调用 ollama搭建本地ai大模型并应用调用 ollama搭建本地ai大模型并应用调用
Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用!
你好,我是Kagol,个人公众号:前端开源星球。带大家一起使用下 Fluent Editor,使用起来基本上和 Quill 没什么区别,只需要重点关注下增强的部分,比如表格、附件、@提醒、表情等模块。
Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用! Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用! Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用!
Viper:强大的Go配置解析库
1 介绍 Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。目前Star 26.6k, 它支持以下特性: 设置默认值 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
Viper:强大的Go配置解析库 Viper:强大的Go配置解析库
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿,推荐或自荐文章/项目/学习资源等。 &#128240
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)