var 是 Java 開發(fā)的好朋友啊楣黍!

簡評:Java var != JavaScript var匾灶。

Java 10 中引入了新的語法用于局部變量類型推斷,很多開發(fā)者有所疑惑租漂,希望這篇文章能幫到你阶女。

什么是類型推斷

其實(shí)在 Java 中類型推斷早就存在了,看下下面的例子:

public void doSomething() {
    final List<String> names = new ArrayList<String>();
                                         //  ^^^^^^------- Redundant
    ...
}

在這個例子中給 ArrayList 定義持有的類型就沒必要了哩治,因?yàn)?List<String> 已經(jīng)定義了我們需要的類型 String 秃踩,在 Java 7 中增加了類型推斷,這時例子可以直接寫成

public void doSomething() {
    final List<String> names = new ArrayList<>();
                                         // ^^------ Inferred!
    ...
}

這兩種寫法是完全合法的业筏,而且最終會形成一樣的字節(jié)碼憔杨。對經(jīng)常使用泛型的開發(fā)者來說,可能早就對上面的類型推斷寫法習(xí)以為常驾孔。

那什么是局部變量類型推斷芍秆?

即能推斷出方法中局部變量的類型,這是 Java 10 中新增的特性翠勉,對應(yīng)關(guān)鍵詞 var妖啥,看個例子 :

public void doSomething() {
    final ??? name = "Todd";
}

name 是什么類型,很明顯是 String对碌,而 Java 10 就可以讓編譯器幫我們判斷其類型荆虱,我們只要寫成下面的形式:

public void doSomething() {
    final var name = "Todd";   // name is inferred as a String!
}

var 的使用不局限于函數(shù)內(nèi)聲明的變量,同時也可以用于循環(huán)的索引:

final List<String> names = new ArrayList<>();

public void doSomething() {
    for(var name: names) {
        System.out.println("Name: " + name);
    }
    for(var i = 0; i < names.size(); i++) {
        System.out.println("Name: " + names.get(i));
    }
}

我必須使用 var 嗎朽们?不是的怀读,老方法一樣完美支持。

這樣的做法危險嗎骑脱?

一個字:不菜枷。

簡單說它是受限于它們存在的方法(或循環(huán)聲明)的范圍。這意味著除了聲明它們的方法的開發(fā)之外叁丧,人們不編寫依賴于這些類型的代碼啤誊。

還有大家會有一個疑惑,很多語言也是不需要定義類型的拥娄,完全由編譯器搞定蚊锹,以 JavaScript 舉例:

var x = "Todd"

簡單吧,x 是 String 類型的稚瘾,但是在 JS 中能重新定義類型牡昆,比如:

var x = "Todd"
x = 42  // Now it's an int?!

像這種 Java 以后是不是也不用考慮變量類型了?錯摊欠,和JS 不一樣丢烘,Java 中的 var 只能在局部變量使用外,同時是不能重復(fù)賦值的凄硼,就拿上面的例子铅协,會導(dǎo)致編譯錯誤:

public void doSomething() {
    var x = "Todd";
    x = 42;    // Compiler fails on this line: 
               // Error: java: incompatible types: int cannot be converted to java.lang.String
}

所以 var 一點(diǎn)都不危險,Java 也不會因此變成動態(tài)類型分配語言摊沉,這僅僅是對局部變量多了一種定義方式狐史。

總結(jié)下

  1. Var 是我們的好朋友;
  2. Java var != JavaScript var说墨;
  3. Var 解決了你顯示聲明變量的一些麻煩骏全,但他們依然存在;
  4. Var 聲明的變量和顯示聲明的變量是一模一樣的尼斧;
  5. Var 類型變量不會影響到你其他的代碼姜贡;
  6. 多了解一下總不會錯吧!

原文鏈接:Java Developers: var Is Your Friend
推薦閱讀:改進(jìn) GitHub 工作流的 15 個建議

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棺棵,一起剝皮案震驚了整個濱河市楼咳,隨后出現(xiàn)的幾起案子熄捍,更是在濱河造成了極大的恐慌,老刑警劉巖母怜,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余耽,死亡現(xiàn)場離奇詭異,居然都是意外死亡苹熏,警方通過查閱死者的電腦和手機(jī)碟贾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轨域,“玉大人袱耽,你說我怎么就攤上這事「煞ⅲ” “怎么了朱巨?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铐然。 經(jīng)常有香客問我蔬崩,道長,這世上最難降的妖魔是什么搀暑? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任沥阳,我火速辦了婚禮,結(jié)果婚禮上自点,老公的妹妹穿的比我還像新娘桐罕。我一直安慰自己,他們只是感情好桂敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布功炮。 她就那樣靜靜地躺著,像睡著了一般术唬。 火紅的嫁衣襯著肌膚如雪薪伏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天粗仓,我揣著相機(jī)與錄音嫁怀,去河邊找鬼。 笑死借浊,一個胖子當(dāng)著我的面吹牛塘淑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚂斤,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼存捺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了曙蒸?” 一聲冷哼從身側(cè)響起捌治,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岗钩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肖油,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凹嘲,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年构韵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趋艘。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疲恢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓷胧,到底是詐尸還是另有隱情显拳,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布搓萧,位于F島的核電站杂数,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瘸洛。R本人自食惡果不足惜揍移,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望反肋。 院中可真熱鬧那伐,春花似錦、人聲如沸石蔗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽养距。三九已至诉探,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棍厌,已是汗流浹背肾胯。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留定铜,地道東北人阳液。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像揣炕,于是被迫代替她去往敵國和親帘皿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容