Java新特性:資料型別可以扔掉了?
阿新 • • 發佈:2020-09-21
在很久很久以前,我們寫程式碼時要慎重的考慮變數的資料型別,比如下面這些:
![image.png](https://cdn.nlark.com/yuque/0/2020/png/92791/1600230531018-c3963fb7-d5c3-4c66-bf48-788cfa3b16b8.png#align=left&display=inline&height=382&margin=%5Bobject%20Object%5D&name=image.png&originHeight=763&originWidth=1154&size=68369&status=done&style=none&width=577)
> **列舉**:儘管在 JDK 5 中增加了列舉型別,但是 Class 檔案常量池的 CONSTANT_Class_info 型別常量並沒有發生任何語義變化,仍然是代表一個類或介面的符號引用,沒有加入列舉,也沒有增加過“CONSTANT_Enum_info”之類的“列舉符號引用”常量。所以使用 enum 關鍵字定義常量,儘管從 Java 語法上看起來與使用 class 關鍵字定義類、使用 interface 關鍵字定義介面是同一層次的,但實際上這是由 Javac 編譯器做出來的假象,**從位元組碼的角度來看,列舉僅僅是一個繼承於 java.lang.Enum、自動生成了 values() 和 valueOf() 方法的普通 Java 類而已,因此列舉也歸為引用型別了**。
然而到了 JDK 10 時,我們就有了新的選擇,JDK 10 中新增了 `var` 區域性變數推斷的功能,使用它我們可以很 happy 的忘記資料型別這件事了,那它是如何使用的呢?接下來我們一起來看。
### 1、使用對比
接下來我們就使用對比的方式,來體會一下 `var` 的作用。
#### 場景一:定義字串
**舊寫法:**
```java
String str = "Hello, Java.";
```
**新寫法:**
```java
var s = "Hello, Java.";
```
> PS:這裡的舊寫法指的是 JDK 10 之前的版本,而新寫法指的是 JDK 10 以後(包含 JDK 10)的版本。
#### 場景二:數值相加
**舊寫法:**
```java
int num1 = 111;
double num2 = 555.666d;
double num3 = num1 + num2;
System.out.println(num3);
```
> PS:當遇到不同型別相加時(`int`+ `double`)會發生資料型別向上轉型,因此 `num3` 就會升級為 `double` 型別。
**新寫法:**
```java
var n1 = 111L;
var n2 = 555.666;
var n3 = n1 + n2;
System.out.println(n3);
```
#### 場景三:集合
**舊寫法:**
```java
List