Java語言規格文檔與JVM規格文檔不一緻...
surprice
Java是一種強類型語言,它語言規範中定義了Java的資料類型分為,基本資料類型和引用資料類型。
基本資料類型(Primitive type):4中整型,2種浮點類型,1種表示unicode編碼的char類型和表示真知的boolean類型。
引用資料類型(References type):(class,array,interface)類型
引用類型級别:(強,軟,弱,虛)引用類型
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類
引用資料類型
發現了一個很奇怪的現象...
The Java Virtual Machine Specification
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》