`
boy00fly
  • 浏览: 197741 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java的数据类型

    博客分类:
  • JVM
阅读更多

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程序无法侦测到底层虚拟机的字长大小;同样,虚拟机的字长大小也不会影响程序的行为-------他仅仅是虚拟机实现的内部属性。

  • 大小: 35.7 KB
  • 大小: 52.4 KB
分享到:
评论

相关推荐

    Java数据类型和MySql数据类型对应一览

    Java 数据类型和 MySql 数据类型对应一览 在 Java 编程语言中,数据类型是指变量或函数可以持有的值的类型。 MySql 数据库也具有其自己的数据类型,用于存储和管理数据。在本文中,我们将对 Java 数据类型和 MySql ...

    JAVA数据类型思维导图

    本资源“JAVA数据类型思维导图”提供了一种直观的方式来理解和记忆Java中的数据类型,包括基本数据类型和引用数据类型。下面将对这两个主要的数据类型进行详细解释。 1. 基本数据类型(Primitive Data Types) - ...

    Java数据类型练习.doc

    Java 数据类型练习 本文档总结了 Java 数据类型的一些基本概念和实践练习题,涵盖了基本类型、变量定义、常量、运算符、控制流、数组、随机数等多方面的知识点。 一、基本类型 Java 中有八种基本类型:byte、...

    Java数据类型和MySql数据类型对应表

    Java 数据类型和 MySql 数据类型对应表 在 Java 编程中,了解 Java 数据类型和 MySql 数据类型的对应关系非常重要。这是因为在 Java 应用程序中,我们经常需要与数据库进行交互,而 MySql 是一种常用的关系数据库...

    MySql于Java数据类型对应列表

    ### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...

    java数据类型思维导图

    这是一个对java数据类型进行详细分类的思维导图,其与我的一篇博客中的图片是一致的。那张图片就是通过它导出的。使用的软件是novamind5。

    22.java数据类型.zip

    22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java数据类型.zip22.java...

    Oracle9i数据类型Java数据类型Schema类型对比.doc

    Oracle9i 数据类型、Java 数据类型以及 Schema 类型之间的对比主要关注它们在存储和处理数据时的差异。这些数据类型是编程和数据库管理中的基础,理解它们的关系对于开发与数据库交互的应用程序至关重要。 1. ...

    JAVA数据类型与Hibernate的类型映射

    这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在Hibernate中有对应的类型映射。例如,int型在Hibernate中通常映射为Integer类型,因为数据库字段可能允许为空...

    java 数据类型讲解

    #### 二、Java数据类型分类 Java的数据类型主要分为两大类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 ##### 2.1 原始数据类型 原始数据类型包括整型、浮点型、布尔型和...

    java数据类型汇总

    Java 数据类型是编程的基础,了解并熟练掌握它们的特性及转换方式对于任何Java开发者来说都至关重要。Java的数据类型主要分为两大类:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)...

    03-JAVA数据类型思维导图

    JAVA数据类型思维导图,便捷整理思路,变量、变量操作、变量的分类、数据类型、变量的内存分析图、类型之间转换

    Java数据类型精解

    资源:Java数据类型精解 作者:Shenkxiao 版本:1.0 pdf 主要内容: Java数据类型 1.1 基本数据类型 1.2 对象数据类型 1.3 引用数据类型 1.4 数组数据类型 上传理由:基础文档共享,对Java初学者有很大的...

    JAVA数据类型转换.pdf

    ### JAVA数据类型转换详解 #### 一、引言 在Java编程中,数据类型转换是一项基本且重要的技能。本文档将详细介绍Java中的数据类型转换,包括简单数据类型之间的转换、字符串与其他数据类型的转换以及一些实用的...

    SQL的数据类型与Java数据类型的对应关系

    SQL的数据类型与Java数据类型的对应关系,是程序员必备的基础知识,欢迎大家下载。

    Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表

    当我们在使用Hibernate时,我们需要了解Java数据类型如何与SQL数据类型对应,以便正确地配置实体类和Hibernate的映射文件(通常是.hbm.xml文件或使用注解的方式)。例如,Java的`int`类型通常对应于SQL的`INTEGER`,...

    C#和java数据类型的等价类型

    C#和Java数据类型的等价类型 C#和Java都是面向对象的编程语言,它们都支持多种数据类型,以便于开发者在编程时可以选择合适的数据类型来存储和操作数据。本文将对C#和Java中的数据类型进行比较和分析,帮助开发者更...

    Java数据类型操作包含转换代码实例.rar

    这个压缩包“Java数据类型操作包含转换代码实例.rar”提供了丰富的代码示例,帮助初学者理解和掌握Java中数据类型的转换。下面将详细阐述相关知识点。 一、基本数据类型 Java的基本数据类型包括整型(byte, short, ...

    javasqlTypes数据库字段类型java数据类型的对应关系

    在Java编程语言中,与数据库交互是常见的任务,这就涉及到`java.sql.Types`枚举类,它是Java数据类型与数据库字段类型之间的桥梁。`java.sql.Types`定义了一系列常量,这些常量代表了SQL标准中的数据类型,使得我们...

    Java数据类型与各数据库类型映射一览表

    Java数据类型与各数据库类型映射一览表 本资源提供了 Java 数据类型与各数据库类型的映射关系表,涵盖了 Java.sql.Type 值、IBM DB2、Oracle、Sybase、SQL Server、Informix 等多个数据库管理系统。该表格详细说明...

Global site tag (gtag.js) - Google Analytics