Java的基本数据类型

类型 意义 取值
boolean 布尔值 true或false
byte 8位有符号整型 -128~127
short 16位有符号整型 -pow(2,15)~pow(2,15)-1
int 32位有符号整型 -pow(2,31)~pow(2,31)-1
long 64位有符号整型 -pow(2,63)~pow(2,63)-1
float 32位浮点数 IEEE754标准单精度浮点数
double 64位浮点数 IEEE754标准双精度浮点数
char 字符型 16位不带符号,Unicode字符

JVM本地对应的类型

typedef unsigned char   jboolean;
typedef signed char jbyte;
typedef short           jshort;
typedef int jint;
typedef long long jlong;
或
typedef __int64 jlong;
typedef double          jdouble;
typedef float           jfloat;
typedef unsigned short  jchar;

java的boolean在jvm中对应unsigned char类型(0为false而非0为true);byte对应signed char类型;short对应short类型;int对应int类型;long对应long long或者_int64类型;double对应double类型;float对应float类型;char对应unsigned short类型。

编译器生成bytecode的类型

compiler将java编译为class,而class文件除了结构信息和元数据等,还包含了bytecode,这其实就是虚拟机的指令,好比物理机的机器指令。举个例子,

  public int getInt(){
    int a = 100;
    return a;
  }

生成该方法的bytecode为

bipush 100
istore_1
iload_1
ireturn

bipush 100将100以byte型推进operand stack中,istore_1将operand stack顶int型数值存入第二个局部变量,iload_1将第二个int型局部变量推进operand stack,ireturn返回int。

对于一些toy jvm会简单地直接用C/C++处理指令,但对于工业级的openjdk中的Hotspot则会继续生成汇编指令执行。

从上面的情况可以看到java的int型编译成bytecode后可能会变成byte型来表示,这个主要取决于java的int型数值的大小,编译器会在编译期间判断大小从而生成对应的指令,比如小于128时则为bipush,大于138且小于32768时则为sipush,它表示以short型表示,而大于32768的则都是用ldc+常量池来表示。

执行时的类型

在指令执行时JVM并不需要指明类型,因为指令已经包含了类型信息,但由于bytecode指令只用1个字节来表示,所以指令数量需要控制,并不是每种基础数据类型都有对应的操作指令,比如iload lload fload dload对应int long float and double。类似还有ireturn lreturn freturn dreturn

所以执行引擎只要根据不同的指令做不同的类型处理即可。

Java调本地

如果某个java对象调用了native方法,此本地方法由编译器编译后access flags 会生成ACC_NATIVE标识,执行引擎执行bytecode时,根据java-jvm类型的映射也可能会涉及到类型处理。

====广告时间,可直接跳过====

鄙人的新书《Tomcat内核设计剖析》已经在京东预售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

=========================

欢迎关注:

谈谈Java基础数据类型的更多相关文章

  1. Java基础-数据类型应用案例展示

    Java基础-数据类型应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.把long数据转换成字节数组,把字节数组数据转换成long. /* @author :yinz ...

  2. Java基础-数据类型int,short,char,long,float,double,boolean,byte

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  3. java基础数据类型包装类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. Java基础数据类型二进制转换

    前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机 ...

  5. java基础-数据类型之殇

    一 前言 Java的数据类型分为2种,分别是基本数据类型和引用数据类型:java的数据类型是强数据类型,意味着每声明一个变量,其必定有与之对应的数据类型:面试常问的java8大基本数据类型其实是基本数 ...

  6. Java 基础数据类型

    Java 提供的基础数据类型(也称内置数据类型)包含:整数类型.浮点类型.字符类型.布尔类型. 整数类型 整数类型变量用来表示整数的数据类型.整数类型又分为字节型(byte).短整型(short).整 ...

  7. [未完成]关于java基础数据类型中的一些总结

    java基本数据类型转换图: 有时候也把char型成为字符型,是加上字符型也是一种特殊的整数类型.

  8. 【Demo 0001】Java基础-数据类型

    本章学习要点:       1.  了解Java 语言       2.  了解Java程序结构;        3.  了解Java中基本数据类型;       4.  掌握基本数据类型之间的运算 ...

  9. JAVA基础数据类型

    JAVA的数据类型粗略分两种 1.基本数据类型 整数类型: byte,short,int,long 浮点类型: float,double 字符类型: char 布尔类型: boolean 基本语法格式 ...

随机推荐

  1. ReportView显示本地报表

    from:http://www.cnblogs.com/duanshuiliu/archive/2012/07/13/2589862.html 使用ReportView控件可以显示远端Report s ...

  2. GIT学习笔记(3):分支管理

    GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...

  3. ubuntu 配置tomcat 实测成功

    https://blog.csdn.net/qq_24091555/article/details/75077781

  4. java sql解析

    https://github.com/JSQLParser/JSqlParser 淘宝博客:http://www.searchtb.com/category/%E6%90%9C%E7%B4%A2%E5 ...

  5. [转]hadoop2.x常用端口及定义方法

    端口 Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集 ...

  6. Linux静默安装Oracle

    打算在云服务器上装oracle服务,以前DBA美眉都是在图形化界面下安装,这次抓瞎了.赶紧上网查查,静默安装可以解决问题.于是乎赶紧开始部署,过程如下.安装环境:操作系统:CentOS 7内存:11G ...

  7. 如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  8. 使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  9. gradle-rn-app工程运行须知

    singwhatiwanna edited this page 16 days ago · 5 revisions  Pages 7 Home Demo 工程运行须知 VirtualAPK API 概 ...

  10. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...