课时85:装箱与拆箱

简介: 1.装箱与拆箱操作的定义2.范例

课时85:装箱与拆箱

 

摘要:

1.装箱与拆箱操作的定义

2.范例

 

01. 装箱与拆箱操作的定义

 

装箱与拆箱操作,基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装类型就有了如下的操作关系。

1.1数据装箱:

将基本数据类型保存到包装类之中,一般可以利用构造方法完成。

-Integer 类:public Integer(int value);

image.png

-Double 类:public Double(double value);

image.png

-Boolean 类:public Boolean(boolean value);

基本类型中其他的方法。

Constructors 是构造方法。

image.png

image.png

1.2数据拆箱:

从包装类中获取基本数据类型

数值型包装类已经由 Number 类定义了拆箱的方法了;

Boolean 型: public boolean booleanvalue0;

范例:以 Int 和 Integer 为例,现在所处在版本交替的振动期。

Public class JavaDemo{
Public  static void main(string args[]){
Integer obj=new Integer(10);//装箱
int num = obj.intValue();//拆箱
System.out.println(num * num);
}
}

跟之前看到的代码不一样,从自定义类变为系统提供类。如果出现Depression,可以通过压制警告来避免。

image.png

Depression 并不会影响正常使用。

 

02. 范例

2.1以 Double 与 Double 为例

Public class JavaDemo{
Public  static void main(string args[]){
double obj=new double (10.1);//装箱
int num = obj.doubleValue();//拆箱
System.out.println(num * num);
}
}

Bug一直存在,无需关注。

image.png

2.2以 Boolean 与 Boolean 为例

就介绍几种常见的类型,其他包装类相对较少出现。

Public class JavaDemo{
Public  static void main(string args[]){
boolean obj=new boolean (true);//装箱
boolean num = obj.booleanValue();//拆箱
System.out.println(num);
}
}

image.png

这些过期操作在1.9版本之前是不存在的,目前处于一个过渡阶段,1.8版本仍被鼓励使用。可以发现从 JDK1.9 之后,对于所有包装类之中提供的构造方法就变为了过期处理不建议用户继续使用,这是因为在 JDK 1.5 之后的版本中,为了简化处理流程已经提供了自动装箱和拆箱的操作,手工维护模式基本不再使用。


但直到 1.9 版本之后,才被视为过时,这是因为系统已计算好时间,大多数旧系统不再更新到 1.9 版本。当年编写代码时并没有自动模式,因此操作相当耗时,需要不断地拆装和组装,非常麻烦。

2.3观察自动装箱与拆箱

public class JavaDemo{
public static void main(string args[]){
Integer obj=10;//自动装箱,此时不再关心构造方法了
Int num=obj;//自动拆箱
obj++;//包装类对象可以直接参与数学运算
System.out.println(num*obj);//直接参与数学运算
}
}

image.png

没有警告,程序再次执行,实现自动增长和数学计算。通过这一段代码发现现在能够自动进行装箱和拆箱,以后就可以直接通过对象来处理。除了提供有这种自动的数学运算支持之外,使用自动装箱最大的好处是可以实现  Obiect  接收基本数据类型的操作。

范例:Obiect 接收小数

public class JavaDemo{
public static void main(string args[]){
Object obj=19.2;//double自动包装箱为 double ,向上转型
为 object
Obj ++;
}
}

19.2 是一个基本数据类型,是object的子类型。原本类与类之间不能直接转换。

image.png

执行后 Object 类不支持,包装类才支持,Number 类是包装类的子类。Object  类型不能直接转换为基本类型。只能先变成  Double 。

public class JavaDemo{
public static void main(string args[]){
Object obj=19.2;//double自动包装箱为 double ,向上转型
为 object
   Double num =(double) obj;//向下转型为包装类,再自动拆箱时执行
   System.out.println(num*2);
}
}

image.png

这些步骤实现了自动装箱和拆箱的功能。可以看到从 JDK 1.5 开始,Java 提供了一种自动支持的功能,到了 JDK 1.9为了巩固概念,将包装类的构造方法都设置为过期定义。但是对于包装类需要注意一些问题了,关于相等判断上。

范例:观察相等判断

public class JavaDemo{
public static void main(string args[]){
Integerx=99;
Integery=99;
System.out.println(x==y);//ture
}
}

image.png

public class JavaDemo{
public static void main(string args[]){
Integerx=127;
Integery=127;
System.out.println(x==y);//ture
}
}

image.png

public class JavaDemo{
public static void main(string args[]){
Integerx=128;
Integery=128;
System.out.println(x==y);//false
}
}

  image.png

public class JavaDemo{
public static void main(string args[]){
Integerx=-128;
Integery=-128;
System.out.println(x==y);//false
}
}

image.png

public class JavaDemo{
public static void main(string args[]){
Integerx=-129;
Integery=-129;
System.out.println(x==y);//false
}
}

image.png

范围的概念,负 128 到正 127 正好Byte的范围,而超过 127 之后==没用,占两类,在这种情况下,所有类都是 Object 子类,所有类都支持。

public class JavaDemo{
public static void main(string args[]){
Integerx=128;
Integery=128;
System.out.println(x==y);//false
System.out.println(x.equals(y));//true
}
}

  image.png

以后 进行包装类的相等判断时,必须使用 Equals() 方法。而包装类本身也需要考虑占位的长度,如果超过了一位的内容,那么就需要使用  Equals() 比较,如果不超过了则使用'“==”即可判断。

public class JavaDemo{
public static void main(string args[]){
Integerx=127;
Integery=new integer(127);
System.out.println(x==y);//false
System.out.println(x.equals(y));//true
}
}

image.png

等等比较的是False,跟 Integer  相同。因此通过取消构造方法,Java 编程可以避免一些复杂的概念。这正是自动装箱与拆箱功能的重要之处,将来不要再使用自动构造方法,毕竟是系统提供的包装类。

相关文章
|
机器学习/深度学习 API 开发工具
通义千问API入门教程
本教程将带你从零开始,快速了解如何通过 API 使用通义千问大模型,并尝试使用大模型 API 开发一些简单的应用应用到工作中,提升效率。
|
7月前
|
安全 Java
课时77:instanceof关键字
课时77介绍了Java中的`instanceof`关键字,用于判断对象是否属于某个类或其子类,确保向下转型的安全性。范例展示了如何使用`instanceof`进行类型检查,并在确认后执行转型操作,避免潜在的`ClassCastException`异常。
119 0
|
4月前
|
NoSQL Linux Redis
每天百万访问也不怕,Redis帮你搞定UV统计
本文介绍了使用Redis实现高性能UV统计系统的方法。Redis凭借其内存数据库特性,支持毫秒级响应和自动去重,非常适合高并发场景下的访客统计。核心思路是利用Redis的Set数据结构作为"每日签到墙",通过记录用户访问ID实现自动去重,并设置24小时过期时间。文章提供了Python代码示例,展示如何记录用户访问和获取当日UV统计数据,还可扩展实现多页面UV统计。相比传统数据库方案,Redis方案更加轻量高效,是中小型网站实现流量统计的理想选择。
290 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能数据隐私保护
使用Python实现深度学习模型:智能数据隐私保护 【10月更文挑战第3天】
581 0
|
10月前
|
Linux iOS开发 MacOS
Matplotlib 中文显示
Matplotlib 中文显示
426 5
|
10月前
|
供应链 监控 数据可视化
如何通过库存看板优化企业的库存管理流程,提升供应链反应速度?
库存管理是现代企业管理的重要环节,尤其在制造业、零售业及电商领域。本文详细探讨了如何通过库存看板优化管理流程,从基本概念、工作原理、实际应用到实施步骤,帮助企业提升库存管理的效率与精度。库存看板通过实时监控、拉动系统和数据驱动决策,减少库存积压和缺货,提高库存周转率,支持企业实现精益管理。
如何通过库存看板优化企业的库存管理流程,提升供应链反应速度?
|
人工智能 搜索推荐 安全
云上远程医疗:跨越时空的医疗革新,重塑健康服务新生态
政策支持和监管加强:随着云上远程医疗的快速发展,政府将出台更多支持政策和监管措施,促进产业的健康有序发展。同时,行业也将加强自律和协作,共同推动云上远程医疗的规范化、标准化发展。 跨界融合与生态构建:云上远程医疗将与保险、健康管理等领域实现跨界融合,构建更加完善的健康服务生态体系。这将有助于提升整个医疗健康行业的服务水平和竞争力。 结语
880 0
|
监控 Java API
4.服务网关之Spring Cloud Gateway
4.服务网关之Spring Cloud Gateway
812 0
|
机器学习/深度学习 人工智能 监控
视觉目标跟踪漫谈:从原理到应用
视觉目标跟踪 (visual object tracking) 是计算机视觉 (computer vision) 领域的一个重要研究问题。通常来说,视觉目标跟踪是在一个视频的后续帧中找到在当前帧中定义的感兴趣物体 (object of interest) 的过程,主要应用于一些需要目标空间位置以及外观(形状、颜色等)特性的视觉应用中。本文旨在对跟踪做一个尽量全面、细致和具有时效性的综述,研究跟踪的定义、应用、架构、算法以及评估等方面的内容。联合作者:图希,恬宁,崇北,昆虚,明烁。 文末福利:免费下载《15分钟开发视觉AI应用》电子书。
8113 0
视觉目标跟踪漫谈:从原理到应用