Java語言規(guī)格文檔與JVM規(guī)格文檔不一致...

Java是一種強(qiáng)類型語言,它語言規(guī)范中定義了Java的數(shù)據(jù)類型分為,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
- 基本數(shù)據(jù)類型(Primitive type):4中整型,2種浮點(diǎn)類型,1種表示unicode編碼的char類型和表示真知的boolean類型。
- 引用數(shù)據(jù)類型(References type):(class,array,interface)類型
- 引用類型級別:(強(qiáng),軟,弱,虛)引用類型

基本類型存儲(chǔ)的是實(shí)際的值,對象引用類型存儲(chǔ)的是對象的地址。
// 引入Lombok,運(yùn)行這個(gè)例子可以看出引用類型與基本類型的差別。
@Data
public class TypeDemo {
private int a = 10;
public static void main(String[] args) {
TypeDemo demo = new TypeDemo();
TypeDemo demo1 = demo;
demo1.setA(100);
System.out.println(demo.getA());
int b = 10;
int c = b;
c = 100;
System.out.println(b);
}
}
基本類型與數(shù)值
byte :-128~127 1字節(jié)
short : -32768~32767 2字節(jié)
int : -2147483648~2147483647 4字節(jié)
long : -9223372036854775808~9223372036854775807 8字節(jié)
char : '\u0000' ~ '\uffff' 也就是0~65535 2字節(jié)
float : 大約為-3.40282347E + 38F ~ -3.40282347E + 38F 4字節(jié)
double : 8字節(jié)
boolean : false和true,具體字節(jié)未給出,有人說boolean類型占了單獨(dú)使用是4個(gè)字節(jié),在數(shù)組中又是1個(gè)字節(jié)。
注意:
- 從Jva7開始,加上前綴0b就可以寫成二進(jìn)制數(shù),例如0b1000是8。
- 數(shù)字字面量可以加上下劃線,易讀。100_0000表示100萬
- float類型的精度一般很難滿足需求,除非需要快速的處理單精度數(shù)據(jù),一般不用float類型。
- 如果需要在計(jì)算中不含有任何的誤差,應(yīng)該使用BigDecimal類
引用數(shù)據(jù)類型
發(fā)現(xiàn)了一個(gè)很奇怪的現(xiàn)象...


看到了嗎?兩個(gè)都是Java官方的參考文檔,但是結(jié)果不一樣。
不管如何,我們知道有3~4個(gè)引用數(shù)據(jù)類型就好了,引用數(shù)據(jù)類型存儲(chǔ)的是類型的內(nèi)存地址。
引用級別
java中提供了4個(gè)級別的引用,除強(qiáng)引用外,其它的三個(gè)引用級別都可以在java.lang.ref中找打它們的身影。
- 強(qiáng)引用:正常對象賦值的語句,String a = "abc";強(qiáng)引用可以直接訪問目標(biāo)對象,并且不會(huì)被系統(tǒng)回收,強(qiáng)引用可能導(dǎo)致內(nèi)存泄漏
- 軟引用:比強(qiáng)引用稍微弱一點(diǎn)的類型,只有再內(nèi)存不足的情況下才會(huì)被回收。如果再內(nèi)存足夠的時(shí)候,調(diào)用System.gc()也不會(huì)回收軟引用的對象。
- 弱引用:比軟引用弱一點(diǎn)的引用類型,只要發(fā)現(xiàn)弱引用,都會(huì)將對象進(jìn)行回收。
- 虛引用:最弱的一個(gè)引用類型,一個(gè)持有虛引用的對象,和沒有引用幾乎是一樣的。虛引用必須和引用隊(duì)列一起使用,它的作用在于跟蹤垃圾回收的過程。
最后
簡單的介紹了Java語言基礎(chǔ)中的需要注意的知識(shí)點(diǎn)。
參考:
- Java中boolean類型占用多少個(gè)字節(jié)
- 《The Java Virtual Machine Specification》
- 《The Java Language Specification》