日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

谈谈Java基础数据类型

發(fā)布時(shí)間:2023/12/10 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈Java基础数据类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java的基本數(shù)據(jù)類型

類型意義取值
boolean布爾值true或false
byte8位有符號(hào)整型-128~127
short16位有符號(hào)整型-pow(2,15)~pow(2,15)-1
int32位有符號(hào)整型-pow(2,31)~pow(2,31)-1
long64位有符號(hào)整型-pow(2,63)~pow(2,63)-1
float32位浮點(diǎn)數(shù)IEEE754標(biāo)準(zhǔn)單精度浮點(diǎn)數(shù)
double64位浮點(diǎn)數(shù)IEEE754標(biāo)準(zhǔn)雙精度浮點(diǎn)數(shù)
char字符型16位不帶符號(hào),Unicode字符

JVM本地對(duì)應(yīng)的類型

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;復(fù)制代碼

java的boolean在jvm中對(duì)應(yīng)unsigned char類型(0為false而非0為true);byte對(duì)應(yīng)signed char類型;short對(duì)應(yīng)short類型;int對(duì)應(yīng)int類型;long對(duì)應(yīng)long long或者_(dá)int64類型;double對(duì)應(yīng)double類型;float對(duì)應(yīng)float類型;char對(duì)應(yīng)unsigned short類型。

編譯器生成bytecode的類型

compiler將java編譯為class,而class文件除了結(jié)構(gòu)信息和元數(shù)據(jù)等,還包含了bytecode,這其實(shí)就是虛擬機(jī)的指令,好比物理機(jī)的機(jī)器指令。舉個(gè)例子,

public int getInt(){int a = 100;return a;}復(fù)制代碼

生成該方法的bytecode為

bipush 100 istore_1 iload_1 ireturn復(fù)制代碼

bipush 100將100以byte型推進(jìn)operand stack中,istore_1將operand stack頂int型數(shù)值存入第二個(gè)局部變量,iload_1將第二個(gè)int型局部變量推進(jìn)operand stack,ireturn返回int。

對(duì)于一些toy jvm會(huì)簡(jiǎn)單地直接用C/C++處理指令,但對(duì)于工業(yè)級(jí)的openjdk中的Hotspot則會(huì)繼續(xù)生成匯編指令執(zhí)行。

從上面的情況可以看到j(luò)ava的int型編譯成bytecode后可能會(huì)變成byte型來表示,這個(gè)主要取決于java的int型數(shù)值的大小,編譯器會(huì)在編譯期間判斷大小從而生成對(duì)應(yīng)的指令,比如小于128時(shí)則為bipush,大于138且小于32768時(shí)則為sipush,它表示以short型表示,而大于32768的則都是用ldc+常量池來表示。

執(zhí)行時(shí)的類型

在指令執(zhí)行時(shí)JVM并不需要指明類型,因?yàn)橹噶钜呀?jīng)包含了類型信息,但由于bytecode指令只用1個(gè)字節(jié)來表示,所以指令數(shù)量需要控制,并不是每種基礎(chǔ)數(shù)據(jù)類型都有對(duì)應(yīng)的操作指令,比如iload lload fload dload對(duì)應(yīng)int long float and double。類似還有ireturn lreturn freturn dreturn。

所以執(zhí)行引擎只要根據(jù)不同的指令做不同的類型處理即可。

Java調(diào)本地

如果某個(gè)java對(duì)象調(diào)用了native方法,此本地方法由編譯器編譯后access flags 會(huì)生成ACC_NATIVE標(biāo)識(shí),執(zhí)行引擎執(zhí)行bytecode時(shí),根據(jù)java-jvm類型的映射也可能會(huì)涉及到類型處理。

相關(guān)閱讀:
從JDK源碼角度看并發(fā)鎖的優(yōu)化
從JDK源碼角度看線程的阻塞和喚醒
從JDK源碼角度看并發(fā)競(jìng)爭(zhēng)的超時(shí)
從JDK源碼角度看Java并發(fā)的公平性
從JDK源碼角度看java并發(fā)線程的中斷

====廣告時(shí)間,可直接跳過====

鄙人的新書《Tomcat內(nèi)核設(shè)計(jì)剖析》已經(jīng)在京東預(yù)售了,有需要的朋友可以到 item.jd.com/12185360.ht… 進(jìn)行預(yù)定。感謝各位朋友。

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

歡迎關(guān)注:

這里寫圖片描述

總結(jié)

以上是生活随笔為你收集整理的谈谈Java基础数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。