kotlin之變量

kotlin只允許在變量前面聲明兩種關(guān)鍵字:val或者var

val:(value的簡寫)用來聲明一種值柒巫,這種值在賦值之后不可改變父叙,對應(yīng)Java中的final(這不是常量嗎...)

var:(variable的簡寫),聲明變量

類型推導(dǎo)機(jī)制

既然在變量前只允許聲明兩種關(guān)鍵字,那么他怎么知道這是什么類型呢璃俗?

比如我們在剛剛的代碼上加入一行:var a = 10

package com.example.test

fun main() {
    var a = 1
    print("hello world! a is:" + a)
}

這樣寫運(yùn)行是沒什么問題的,但是會(huì)報(bào)一個(gè)警告:Convert concatenation to template

也就是說他不推薦我們用+去拼接字符串悉默,按照提示自動(dòng)幫我們改成

package com.example.test

fun main() {
    var a = 1
    print("hello world! a is:$a")
}

運(yùn)行結(jié)果是一樣的:hello world! a is:1

我們定義了一個(gè)變量并將一個(gè)數(shù)字賦值給他城豁,那么這個(gè)變量的類型就是整型變量,如果將字符串賦值給他那么他就是個(gè)字符串變量抄课,不可能是其他唱星,這就是推導(dǎo)機(jī)制。

但是跟磨,當(dāng)我對一個(gè)變量延遲賦值怎么辦间聊?他是一個(gè)什么類型的值呢?

這時(shí)候抵拘,Kotlin的類型推倒機(jī)制就不能正常工作了哎榴,這時(shí)候就需要顯示的去聲明變量,Kotlin提供了對這一功能的支持

語法:val a: Int = 1

這時(shí),我們顯示的聲明了a為Int型尚蝌,如果再去賦值為String型迎变,就會(huì)報(bào)錯(cuò)

這里需要注意的地方:Int首字母是大寫的,拋棄了Java中的基本數(shù)據(jù)類型

這一個(gè)小小的差別意味著飘言,在Java中這是一個(gè)基本數(shù)據(jù)類型衣形,而在Kotlin中,他變成了一個(gè)類姿鸿,他具有屬性和方法

而Java由于基本數(shù)據(jù)類型的存在谆吴,也使得他不是一個(gè)完完全全的面向?qū)ο笳Z言,只能算是半面向?qū)ο笳Z言

Java和Kotlin數(shù)據(jù)類型對照表

Java基本數(shù)據(jù)類型 Kotlin對象數(shù)據(jù)類型 數(shù)據(jù)類型說明
byte Byte 字節(jié)型
int Int 整型
short Short 短整型
long Long 長整型
float Float 單精度浮點(diǎn)型
double Double 雙精度浮點(diǎn)型
char Char 字符型
boolean Boolean 布爾型

為什么設(shè)計(jì)val苛预,只使用var不行嗎纪铺?

其實(shí)這是為了解決Java中final關(guān)鍵字沒有被合理使用的問題

在Java中,如果不手動(dòng)聲明final碟渺,那么這個(gè)變量就是可變的鲜锚,這不一定是個(gè)好事,你永遠(yuǎn)不知道這個(gè)值被誰在什么時(shí)候給修改了苫拍,從而帶來bug的難以查找和定位芜繁,除非一個(gè)值可以變,否則都應(yīng)該加上final绒极,但是很多人沒這個(gè)意識骏令,僅僅是因?yàn)镴ava對此不是強(qiáng)制的

不僅僅是這些,final修飾的關(guān)鍵字與不做修飾的相比垄提,性能上也會(huì)有些差異:

final修飾的全局變量會(huì)被當(dāng)做常量來使用榔袋,放入Constant pool中。
被final修飾的局部變量會(huì)直接被優(yōu)化成常量铡俐,字節(jié)碼直接存儲(chǔ)運(yùn)算后的常量凰兑。
由于Java規(guī)范規(guī)定,final修飾的方法不能被重寫审丘,所以jvm實(shí)現(xiàn)中invokevirtual在調(diào)用final修飾的方法(final方法是非虛方法)時(shí)會(huì)省去對方法接收者的多態(tài)選擇

作者:Joash
鏈接:https://www.zhihu.com/question/38264283/answer/82342134
來源:知乎

所以吏够,在kotlin中,我們盡量使用val去修飾變量滩报,只有當(dāng)val不滿足時(shí)锅知,才聲明為var

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脓钾,隨后出現(xiàn)的幾起案子售睹,更是在濱河造成了極大的恐慌,老刑警劉巖可训,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昌妹,死亡現(xiàn)場離奇詭異生真,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捺宗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門柱蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚜厉,你說我怎么就攤上這事长已。” “怎么了昼牛?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵术瓮,是天一觀的道長。 經(jīng)常有香客問我贰健,道長胞四,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任伶椿,我火速辦了婚禮辜伟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脊另。我一直安慰自己导狡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布偎痛。 她就那樣靜靜地躺著旱捧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踩麦。 梳的紋絲不亂的頭發(fā)上枚赡,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機(jī)與錄音谓谦,去河邊找鬼贫橙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茁计,可吹牛的內(nèi)容都是我干的料皇。 我是一名探鬼主播谓松,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼星压,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鬼譬?” 一聲冷哼從身側(cè)響起娜膘,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎优质,沒想到半個(gè)月后竣贪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體军洼,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年演怎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匕争。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爷耀,死狀恐怖甘桑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歹叮,我是刑警寧澤跑杭,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站咆耿,受9級特大地震影響德谅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萨螺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一窄做、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慰技,春花似錦浸策、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至手报,卻和暖如春蚯舱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掩蛤。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工枉昏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揍鸟。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓兄裂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阳藻。 傳聞我的和親對象是個(gè)殘疾皇子晰奖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359