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

包装类详解

概述

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

基本类型对应的包装类(位于java.lang包中)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
Integer类
  • Integer类概述

    包装一个对象

方法名说明
public Integer(int value)根据 int 值创建 Integer 对象(过时)
public Integer(String s)根据 String 值创建 Integer 对象(过时)
public static Integer valueOf(int i)返回表示指定的 int 值的 Integer 实例
public static Integer valueOf(String s)返回保存指定String值的 Integer 对象
static string tobinarystring(int i)得到二进制
static string tooctalstring(int i)得到八进制
static string toHexstring(int i)得到十六进制
static int parseInt(string s)将字符串类型的整数转成int类型的整数
  • 示例代码

public class test14 {public static void main(String[] args) {//public Integer(int value):根据 int 值创建 Integer 对象(过时)Integer i1 = new Integer(100);System.out.println(i1);//100//public Integer(String s):根据 String 值创建 Integer 对象(过时)Integer i2 = new Integer("100");
//Integer i2 = new Integer("abc"); //NumberFormatExceptionSystem.out.println(i2);//100System.out.println("--------");//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例Integer i3 = Integer.valueOf(100);//100System.out.println(i3);//public static Integer valueOf(String s):返回保存指定String值的Integer对象Integer i4 = Integer.valueOf("100");//100System.out.println(i4);}
}
装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱:从基本类型转换为对应的包装类对象。

  • 拆箱:从包装类对象转换为对应的基本类型。

用Integer与 int为例:

基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

包装对象---->基本数值

自动装箱与自动拆箱

由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:

基本类型与字符串之间的转换

基本类型转换为String

  • 转换方式

  • 方式一:直接在数字后加一个空字符串

  • 方式二:通过String类静态方法valueOf()

  • 示例代码

public class IntegerDemo {public static void main(String[] args) {//int --- Stringint number = 100;//方式1String s1 = number + "";System.out.println(s1);//方式2//public static String valueOf(int i)String s2 = String.valueOf(number);System.out.println(s2);System.out.println("--------");}
}

String转换成基本类型

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

  • public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。

  • public static short parseShort(String s):将字符串参数转换为对应的short基本类型。

  • public static int parseInt(String s):将字符串参数转换为对应的int基本类型。

  • public static long parseLong(String s):将字符串参数转换为对应的long基本类型。

  • public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。

  • public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。

  • public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。

代码使用(仅以Integer类的静态方法parseXxx为例)如:

  • 转换方式

    • 方式一:先将字符串数字转成Integer,再调用valueOf()方法

    • 方式二:通过Integer静态方法parseInt()进行转换

  • 示例代码

注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。

底层原理

建议:获取Integer对象的时候不要自己new,而是采取直接赋值或者静态方法valueOf的方式

因为在实际开发中,-128~127之间的数据,用的比较多。如果每次使用都是new对象,那么太浪费内存了。

所以,提前把这个范围之内的每一个数据都创建好对象,如果要用到了不会创建新的,而是返回已经创建好的对象。

//1.利用构造方法获取Integer的对象(JDK5以前的方式)
/*Integer i1 = new Integer(1);Integer i2 = new Integer("1");System.out.println(i1);System.out.println(i2);*///2.利用静态方法获取Integer的对象(JDK5以前的方式)
Integer i3 = Integer.valueOf(123);
Integer i4 = Integer.valueOf("123");
Integer i5 = Integer.valueOf("123", 8);System.out.println(i3);
System.out.println(i4);
System.out.println(i5);//3.这两种方式获取对象的区别(掌握)
//底层原理:
//因为在实际开发中,-128~127之间的数据,用的比较多。
//如果每次使用都是new对象,那么太浪费内存了
//所以,提前把这个范围之内的每一个数据都创建好对象
//如果要用到了不会创建新的,而是返回已经创建好的对象。
Integer i6 = Integer.valueOf(127);
Integer i7 = Integer.valueOf(127);
System.out.println(i6 == i7);//trueInteger i8 = Integer.valueOf(128);
Integer i9 = Integer.valueOf(128);
System.out.println(i8 == i9);//false//因为看到了new关键字,在Java中,每一次new都是创建了一个新的对象
//所以下面的两个对象都是new出来,地址值不一样。
/*Integer i10 = new Integer(127);Integer i11 = new Integer(127);System.out.println(i10 == i11);Integer i12 = new Integer(128);Integer i13 = new Integer(128);System.out.println(i12 == i13);*/

相关文章:

  • FPS游戏之漫谈Shader.globalMaximumLOD
  • 【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 保姆级教程 企业级实战
  • 【Antd】Form 表单获取不到 Input 的值
  • DataGear制作基于three.js的3D数据可视化看板
  • 提升Vue3应用效率的秘诀:深入比较ref与reactive!
  • ubuntu 安装jdk8
  • C语言中的套娃——函数递归
  • 【力扣白嫖日记】178.分数排名
  • 基于JavaWeb实现的校园新闻发布系统
  • 国产替代MATLAB的征途
  • 推荐收藏!科大讯飞算法岗(NLP 方向)面试题7道(含答案)
  • pytest基本应用
  • 网络安全与信创产业发展:构建数字时代的护城河
  • BFS中的多源BFS-双端队列BFS
  • 掌握 Android 中的 RecyclerView 优化
  • 分享一款快速APP功能测试工具
  • 【刷算法】从上往下打印二叉树
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CODING 缺陷管理功能正式开始公测
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Java Agent 学习笔记
  • JS实现简单的MVC模式开发小游戏
  • JS题目及答案整理
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 初识MongoDB分片
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从PHP迁移至Golang - 基础篇
  • 分布式任务队列Celery
  • 机器学习学习笔记一
  • 简单数学运算程序(不定期更新)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • Nginx实现动静分离
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 飞书APP集成平台-数字化落地
  • $().each和$.each的区别
  • (C++17) optional的使用
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (JS基础)String 类型
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (南京观海微电子)——COF介绍
  • (七)Java对象在Hibernate持久化层的状态
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .bat批处理出现中文乱码的情况
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET委托:一个关于C#的睡前故事
  • @SentinelResource详解