Java的数据类型

Java数据类型

 

Java虚拟机是通过某些数据类型来执行计算的,数据类型及其运算都是由Java虚拟机规范严格定义的。

数据类型分为两种:基本数据类型引用数据类型基本类型的变量持有原始值,而引用数据类型的变量持有引用值

术语“引用值”指的是对某个变量的引用,而不是该对象本身。与此相对的,原始值则是真正的原始数据。

下图是Java虚拟机中数据类型的描述。


       

 

Java语言中的所有基本类型同样也都是Java虚拟机中的基本数据类型。但是boolean有点特别,虽然Java虚拟机也把boolean看做基本类型,但是指令集对boolean只有很有限的支持。当编译器吧Java源代码编译成字节码时,他会用int或byte来表示boolean。在java虚拟机中,false是由整数零来表示的,所有非零整数都表示true。涉及boolean值的操作则会用int。另外,boolean数组是当做byte数组来访问的,但是在“堆”区他也可以被表示为位域。

 

除了boolean类型外,java语言中的基本类型构成了java虚拟机中的数值类型。

虚拟机中的数值类型分为:整数类型(包括byte,int,long,char)浮点数类型(包括float,double)

和java语言一样,Java虚拟机的基本类型的值在任何地方都是一致的,比如,不管底层的主机平台是什么,一个long在任何虚拟机中总是一个64为位二进制补码表示的有符号整数。

 

java虚拟机中还有一个只在内部使用的基本数据类型:returnAddress,java程序员不能使用这个类型。这个基本类型被用来实现java程序中的finally子句。

 

java虚拟机的引用类型被统称为“引用”(reference),有三种引用类型类类型接口类型以及数值类型,他们的值都是对动态创建对象的引用。

还有一种特殊的引用值null。他表示该变量没有引用任何对象。

 

java虚拟机规范定义了每个数据类型的取值范围,但是却没有定义他们的位宽。存储这些类型的值所需的占位宽度,是由具体的虚拟机实现的设计者决定的。java虚拟机数据类型的取值范围如下图所示:

 

 

 

补充说明

 

从JDK 5.0开始,Java里面出现了自动拆箱解箱的操作,基于这点需要做一定的说明:

  对应原始的数据类型,每种数据类型都存在一个复杂类型的封装类,分别为Boolean、Short、Float、Double、Byte、Integer、Long、Character,这些类型都是内置的封装类,这些封装类(Wrapper)提供了很直观的方法,针对封装类需要说明的是,每种封装类都有一个xxxValue()的方法,通过这种方法可以把它引用的对象里面的值转化成为原始变量的值,不仅仅如此,每个封装类都还存在一个valueOf(String)的方法直接把字符串对象转换为相应的简单类型。

  在JDK 5.0之前,没有存在自动拆解箱的操作,即Auto Box操作,所以在这之前是不能使用以下方式的赋值代码的:

Integer a = 0; //这种赋值方式不能够在JDK 1.4以及以下的JDK编译器中通过

但是JDK 5.0出现了自动拆解箱的操作,所以在JDK 5.0以上的编译器中,以上的代码是可以通过的

      Java提供了两个专门的类进行高精度运算:BigInteger与BigDecimal,虽然Java原始变量都具有对应的封装类型,但是这两个变量没有对应的原始类型,而是通过方法来提供这两种类型的一些运算,其含义为普通类型能够做的操作,这两个类型对应都有,只是因为精度过大可能效率不够高。至于这两个类的具体操作可以参考JDK的相关API文档。

     若要求精度的结果,尽量避免使用float和double.

     关于基本类型中数值类型的还有一个自动转换和强制转换的概念,后续再阐述吧。

 

 

字长的考量

 

java虚拟机中,最基本的数据单元就是字(word),他的大小是由每个虚拟机实现的设计者决定的。jvm规范中明确规定了,字长必须足够大,至少是一个字单元就足以持有byte、short、int、char、float、returnAddress或者reference类型的值,而两个字单元就足以持有long或者double类型的值

因此虚拟机实现的设计者至少得选择32位作为字长。或者选择更为高效的字长大小。通常根据底层主机平台的指针长度来选择字长。

 

在Java虚拟机规范中,关于运行时数据区的大部分内容,都是基于“字”这个抽象概念的。比如,关于栈帧的两个部分-------局部变量和操作数栈------都是按照“字”来定义的。这些内存区域能够容纳任何虚拟机数据类型的值,当把这些值放入局部变量或者操作数栈中时,他将占一个或两个字单元。

 

在运行时,Java程序无法侦测到底层虚拟机的字长大小;同样,虚拟机的字长大小也不会影响程序的行为-------他仅仅是虚拟机实现的内部属性。

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值