谈谈Java基础数据类型
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基础数据类型的更多相关文章
- Java基础-数据类型应用案例展示
Java基础-数据类型应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.把long数据转换成字节数组,把字节数组数据转换成long. /* @author :yinz ...
- Java基础-数据类型int,short,char,long,float,double,boolean,byte
Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...
- java基础数据类型包装类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java基础数据类型二进制转换
前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机 ...
- java基础-数据类型之殇
一 前言 Java的数据类型分为2种,分别是基本数据类型和引用数据类型:java的数据类型是强数据类型,意味着每声明一个变量,其必定有与之对应的数据类型:面试常问的java8大基本数据类型其实是基本数 ...
- Java 基础数据类型
Java 提供的基础数据类型(也称内置数据类型)包含:整数类型.浮点类型.字符类型.布尔类型. 整数类型 整数类型变量用来表示整数的数据类型.整数类型又分为字节型(byte).短整型(short).整 ...
- [未完成]关于java基础数据类型中的一些总结
java基本数据类型转换图: 有时候也把char型成为字符型,是加上字符型也是一种特殊的整数类型.
- 【Demo 0001】Java基础-数据类型
本章学习要点: 1. 了解Java 语言 2. 了解Java程序结构; 3. 了解Java中基本数据类型; 4. 掌握基本数据类型之间的运算 ...
- JAVA基础数据类型
JAVA的数据类型粗略分两种 1.基本数据类型 整数类型: byte,short,int,long 浮点类型: float,double 字符类型: char 布尔类型: boolean 基本语法格式 ...
随机推荐
- bootstrap基本使用
bootstrap是封装了css和js代码实现酷炫的效果,所以使用的时候,比如说是列表效果,直接调用它本身定义的函数就ok了 静态文件 把href='..static/..'里面改为url_for静态 ...
- image_Magic
http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html mogrify -sample 25% *.jpg 批量处理图片 conv ...
- elastic job配置
zookeeper注册中心配置 1 package com.zwh.pay.account.worker; import com.dangdang.ddframe.job.reg.zookeeper. ...
- HTML5/CSS3实现图片倒影效果
在线演示 本地下载
- iOS7中彻底隐藏status bar
用Xcode5开发新游戏,发现在iOS7中按照以前的方法隐藏status bar失效了. 想要彻底隐藏status bar,需要在info.plist中添加新行“View controller-bas ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- C++ vector 多次删除第一个元素
转载声明: 代码都是来源于一下连接,做了一点点修改,为了记忆方便,故贴在这里,原文链接:http://blog.csdn.net/doctor_feng/article/details/1188078 ...
- 初入spring boot(五 )websocket
一.广播式 广播式即服务端有消息时,会将消息发送给所有连接了当前endpoint的浏览器 1.配置websocket,需要在配置类上使用@EnableWebSocketMessageBroker开启w ...
- 关于C/C++中main函数参数的学习
因为面对对象作业(2018.5.21)的要求,去学习了C/C++中main函数参数的意义,以及一些简单的使用(从命令行指令的接受),不给予赘述.(仅为个人拙见,还望看官指正) 首先,带有参数的main ...
- eclipse中的错误解决——Servlet cannot be resolved to a type
问题如图 解决问题方法