Java SE 学习笔记:包装类篇

简介: Java SE 学习笔记:包装类篇

提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要有包装类?

Java是面向对象的语言,但是Java不是纯面向对象语言,因为Java保留了C语言的8种基不数据类型和void.

int,,byte,short,long,boolean,float,double,char

这些类型不属于面向对象。

为什么要保留这些类型呢?

因为这些类型有丰富的运算符可以支持,而且这些类型有固定大小的内存空间。但是这些特性没必要重新再设计新的,所以Java就直接沿用至今。

但是Java除了这些以外又都是面向对象的,很多的API方法,或者新特性都是针对“对象”而设计的,比如:集合、泛型等,只支持对象,不支持基本数据类型。

Java为了解决这样的问题,希望基本数据类型的数据也能用于集合,也能使用一些新特性,就给它们提供了“包装类”。

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

Void


二、基本数据类型与包装类之间如何相互转换?

前文提到,尽管Java为基本数据类型设计了包装类,使之可以运用于集合等众多AP方法中,但基本数据类型和包装类毕竟是两种类型,是需要转换才能使用。

而这两者之间相互转换的操作被称为“装箱”与“拆箱”。

装箱:

基本数据类型的数据 -> 包装类的对象

拆箱:

包装类的对象->基本数据类型的数据

在JDK1.5之前,装箱和拆箱必须手动进行,毕竞麻烦

手动装箱演示如下

在JDK1.5之后,装箱和拆箱可以自动进行,非常方便

自动装箱演示如下

但是自动的装箱与自动的拆箱,只支持对应类型之间。


三、包装类常用方法

3.1 获取某个数据类型的范围

我们最常用的包装类是Integer,因此以下案例方法是以Integer作为参考,读者可依次类推其他包装类

包装类.MAX_VALUE :包装类的最大正有限值的常量

包装类.MIN VALUE:包装类的最小负有限值的常量

代码如下(示例):

3.2 将十进制的整数转换为其他进制的数

代码如下(示例):

//查看25这个十进制值的二进制、八进制、十六进制
//把25转为二进制
System.out.println(Integer.toBinaryString(25));
//把25转为八进制
System.out.println(Integer.toOctalString(25));
//把25转为十六进制
System.out.println(Integer.toHexString(25));

3.3 基本数据类型与String之间的相互转换

3.3.1 把基本数据类型转为字符串

3.3.2  把字符串转为基本数据类型

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

  • public static int parseInt(string s): 将字符参数转换为对应的int基本类型
  • public static long parseLong(string s): 将字符串参数转换为对应的long基本类型
  • public static double parseDouble(String s): 将字符参数转换为对应的double基本类型.

或把字符串转为包装类,然后可以自动拆箱为基本数据类型

  • public static Integer valueof(string s): 将字符参数转换为对应的Integer包装类,然后可以自动拆箱为int基本类型
  • public static Long valueof(string s): 将字符参数转换为对应的Long包装类,然后可以自动拆销为lona其木米型

代码如下(示例):

3.4 字符转大小写

代码如下(示例):

Character.toUpperCase('x');
Character.toLowerCase('x') ;

3.5 比较

代码如下(示例):

Double.compare(double d1, double d2)
Integer.compare(int x, int y)

返回值都是int类型,以上图第二句代码举例,如果x>y,返回1,如果x==y,返回0,如果x<y,返回-1;


四、包装类对象的特点

4.1 部分包装类有缓存对象

Byte: -128~127
Short: -128~127
Integer: -128~127
Long: -128~127
FLoat和Double不缓存
Character: -127 最原始的ASCII表范围字符串

Boolean: true, false

为什么要有缓存对象 ?

如果每一次自动装箱,都产生新对象的话,那么会怎么样?-128~127范围内的数字在程序中出现的概率非常高,那么就会导致包装类对象泛滥。内存就很紧张考虑到这一点,就想着重复使用一些对象,这些对象被缓存起来,重复使用。例如: 1这个值对应的包装类对象,重复使用1个。

缓存对象是针对自动装箱的,new出来的不是缓存对象。

包装类.valueof()使用了缓存对象

附注:

java中基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean。

这6种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。 两种浮点数类型的包装类Float,Double并没有实现常量池技术。

4.2  包装对象不可变

代码如下(示例):

4.3 类型转换问题

代码如下(示例):

4.4 总结

== 比较
如果是包装类和基本数据类型之间(无论它们是否对应)都是先把包装类拆箱后,按照基本数据类型的比较规则进行。
如果都是包装类比较,那么要求必须是同一种类型之间比较。


五、总结

以上就是今天要讲的内容,本文仅仅简单介绍了包装类的相关知识及其使用,而其包装类则为我们提供了大量能使我们快速便捷地处理数据的方法。

相关文章
|
10月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
526 5
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
250 13
|
7月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
7月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
7月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1252 1
|
10月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
361 0
|
开发框架 Java 开发工具
【Java全栈学习笔记-U1-day01】Java介绍
本笔记整理了Java学习的基础内容,涵盖程序理解、Java语言特性、JDK安装与配置、Java程序开发工具及编写步骤。重点介绍了Java程序的基本结构、编译和运行过程,以及输出语句的使用。通过实例演示了IDEA创建Java程序的方法,并强调了编码规范和注意事项。适合初学者复习和交流学习。 主要内容: 1. 理解程序:计算机组成、程序定义。 2. 简介:Java语言特点、技术平台、JDK作用。 3. 编写Java程序:编写、编译、运行步骤,基本结构。 4. 输出语句 5. DEA使用:新建工程、保存位置、文件介绍、新建类。 6. 扩展:注释、代码规范、大小写敏感、缩进等。
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
395 4
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
217 0