天天看點

primitive type java_Java Primitive type與References type

Java語言規格文檔與JVM規格文檔不一緻...

primitive type java_Java Primitive type與References type

surprice

Java是一種強類型語言,它語言規範中定義了Java的資料類型分為,基本資料類型和引用資料類型。

基本資料類型(Primitive type):4中整型,2種浮點類型,1種表示unicode編碼的char類型和表示真知的boolean類型。

引用資料類型(References type):(class,array,interface)類型

引用類型級别:(強,軟,弱,虛)引用類型

primitive type java_Java Primitive type與References type

difference

基本類型存儲的是實際的值,對象引用類型存儲的是對象的位址。

// 引入Lombok,運作這個例子可以看出引用類型與基本類型的差别。

@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);

}

}

基本類型與數值

byte :-128~127 1位元組

short : -32768~32767 2位元組

int : -2147483648~2147483647 4位元組

long : -9223372036854775808~9223372036854775807 8位元組

char : '\u0000' ~ '\uffff' 也就是0~65535 2位元組

float : 大約為-3.40282347E + 38F ~ -3.40282347E + 38F 4位元組

double : 8位元組

boolean : false和true,具體位元組未給出,有人說boolean類型占了單獨使用是4個位元組,在數組中又是1個位元組。

注意:

從Jva7開始,加上字首0b就可以寫成二進制數,例如0b1000是8。

數字字面量可以加上下劃線,易讀。100_0000表示100萬

float類型的精度一般很難滿足需求,除非需要快速的處理單精度資料,一般不用float類型。

如果需要在計算中不含有任何的誤差,應該使用BigDecimal類

引用資料類型

發現了一個很奇怪的現象...

primitive type java_Java Primitive type與References type

The Java Virtual Machine Specification

primitive type java_Java Primitive type與References type

The Java Language Specification

看到了嗎?兩個都是Java官方的參考文檔,但是結果不一樣。

不管如何,我們知道有3~4個引用資料類型就好了,引用資料類型存儲的是類型的記憶體位址。

引用級别

java中提供了4個級别的引用,除強引用外,其它的三個引用級别都可以在java.lang.ref中找打它們的身影。

強引用:正常對象指派的語句,String a = "abc";強引用可以直接通路目标對象,并且不會被系統回收,強引用可能導緻記憶體洩漏

軟引用:比強引用稍微弱一點的類型,隻有再記憶體不足的情況下才會被回收。如果再記憶體足夠的時候,調用System.gc()也不會回收軟引用的對象。

弱引用:比軟引用弱一點的引用類型,隻要發現弱引用,都會将對象進行回收。

虛引用:最弱的一個引用類型,一個持有虛引用的對象,和沒有引用幾乎是一樣的。虛引用必須和引用隊列一起使用,它的作用在于跟蹤垃圾回收的過程。

最後

簡單的介紹了Java語言基礎中的需要注意的知識點。

參考:

《The Java Virtual Machine Specification》

《The Java Language Specification》