java10 var關鍵字淺析
2018年3月20日,Oracle釋出java10。java10為java帶來了很多新特性,其中讓人眼前一亮的便是var關鍵字的引入。
從今以後我們可以這樣寫java程式碼了。
public class Example {
public static void main(String[] args) {
var eg = new Example;
eg.emptyFunc();
}
public void emptyFunc() {}
}
很方便是吧,但是java在var上是有要求的。總結起來,有以下三點很重要:
(1)只能用於區域性變數上;
(2)宣告時必須初始化;
(3)不能用作方法引數。
這三點很重要,但也讓我看出了點什麼,我大膽猜想,是不是javac會在編譯時,悄悄將var換成所賦值的型別呢?
在java1.10的環境下,我們編譯上面的程式碼。
藉助於IDEA我們反編譯上面的位元組碼檔案Example.class結果如下:
var關鍵字被替換成了Example。 固然,驗證了我們的猜想。我們再來看看下面這些程式碼:
public class UseVar {
public void baseTypeVar() {
var a = 1;
var b = 255;
var c = 256;
var d = 10L;
}
}
在java10環境下,我們使用javac編譯上面的程式碼,然後藉助於IDEA反編譯得到的位元組碼檔案UseVar.class檔案
很奇怪,a, b, c都被反編譯成boolean型別了,倒是d被反編譯成long型了,符合預期的結果。至於a, b, c成為boolean型別,倒也驗證了我另一篇文章裡講的,jvm是把java中的boolean當做int來理解了。總而言之,var在編譯階段是被會替換成所賦值的型別。
這也驗證了上面的三個要求中的兩個,為什麼var宣告變數時必須初始化,以及為什麼不能用作方法引數。
【總結】:本質上,java仍然是靜態強型別語言,var可以理解為java的一個語法糖。
【問題】:var為什麼只能宣告區域性變數?var宣告的變數可以被再次賦值嗎?
相關文章
- JAVA面試題 淺析Java中的static關鍵字Java面試題
- J2SE入門(五) final關鍵字淺析
- Java 10 var關鍵字詳解和示例教程Java
- Java 10推斷型別和var關鍵字簡介Java型別
- redux中間鍵淺析Redux
- 淺顯易懂的理解JavaScript中的this關鍵字JavaScript
- 效能測試中伺服器關鍵效能指標淺析伺服器指標
- 深析Synchronized關鍵字(小白慎入,深入jvm原始碼,兩萬字長文)synchronizedJVM原始碼
- Webpack相關原理淺析Web
- this關鍵字
- 關鍵字
- ORACLE關閉過程淺析Oracle
- Oracle相關NUMA特性淺析Oracle
- abstract關鍵字 super 關鍵字 類與繼承繼承
- out關鍵字和ref關鍵字的區別
- Swift 關鍵字Swift
- typedef關鍵字
- Synchronized關鍵字synchronized
- JavaScript this關鍵字JavaScript
- Swift —— 關鍵字Swift
- oracle關鍵字Oracle
- Auto關鍵字
- super關鍵字
- synchronized 關鍵字synchronized
- static關鍵字
- [JavaScript] this 關鍵字JavaScript
- 4關鍵字
- Runnable,Callable,Future關係淺析
- Google關鍵字工具Go
- Synchronize 關鍵字原理
- [java]transient關鍵字Java
- 使用 Synchronized 關鍵字synchronized
- c#關鍵字C#
- java中this關鍵字Java
- 多關鍵字排序排序
- JavaScript中this關鍵字JavaScript
- java transient關鍵字Java
- javascript的this關鍵字JavaScript