歡迎閱讀從Java到Kotlin系列筆記
與Java不同的是型豁,Kotlin中所有的類型都是對象模叙,所有類型的基類都是
Any
梁丘。
把基本類型作為對象的好處是趋厉,我們可以給基本類型添加擴(kuò)展方法和擴(kuò)展屬性缝龄。這使得我們不需要像寫Java的時(shí)候那樣汰现,為了實(shí)現(xiàn)基本類型的某個(gè)特殊操作,而新創(chuàng)建一個(gè)類叔壤,再把基本類型wrap在類里面瞎饲。
這里需要說明的是,值一樣炼绘,就是同一個(gè)對象嗅战,這可以用Kotlin中比較是否是同一對象的==
得到
在Kotlin中,只有以下幾大類基本類型:
- Numbers(數(shù)字型)
- Characters(字符型)
- Boolean (布爾型)
- String(字符型)
- Array (數(shù)組型)
Number
Numbers包括:
- Byte
- Short
- Int
- Long
- Float
- Double
基本上與Java對應(yīng)的類型用法差不多饭望,只是Number類型的值需要注意一下幾點(diǎn)與Java的不同
- Long類型要寫成
123L
仗哨,不像Java,這里只能用大寫的L
- 值可以寫二進(jìn)制(
0b001001
)和十六進(jìn)制(0xfff
)铅辞,但是不支持像Java那樣厌漂,以0
開頭表示八進(jìn)制。我猜想大概是因?yàn)镵otlin覺得以0
表示進(jìn)制與十進(jìn)制的數(shù)字太像了吧斟珊,這不符合Kotlin Explicit&Concise的設(shè)計(jì)理念- 值支持用
_
分割開來苇倡,增加可讀性,比如Java中的100000
在Kotlin中可以寫成10_0_0_00
囤踩,可以把_
看做不存在- 這些類型的值都可以為
null
- __注意旨椒!我們知道Java中,支持把一個(gè)
int
類型賦值給long
類型變量堵漱。但是在Kotlin中所有的類型都不支持這樣的隱式類型轉(zhuǎn)換综慎,類型轉(zhuǎn)換都需要調(diào)用專門的類型轉(zhuǎn)換函數(shù)。比如把int
類型賦值給long
勤庐,必須要寫成
1.toLong()
示惊。這樣的設(shè)計(jì),也是符合了Kotlin Explicit的設(shè)計(jì)理念愉镰。
Character
目前看來米罚,Kotlin中的字符類型跟Java中的字符類型沒什么兩樣
Boolean
也沒什么兩樣,但是要注意丈探,在Kotlin中布爾類型可以為
null
String
Kotlin中的字符串厲害了录择!他的String Templates可是大大簡化了我們在Java中使用
+
做字符串拼接的麻煩。
//假設(shè)目前有變量a,b隘竭,c塘秦。類型我們先不管
//現(xiàn)在要實(shí)現(xiàn)打印"a = xx, b = xx, c= xx"這句話
//在java中,我們是這樣做的
System.out.println("a = "+a+",b = "+b+",c = "+c)
//在Kotlin中货裹,用String Templates可就厲害了
println("a = ${a}, b = $嗤形, c = ${c}")
/*
${xx}就是字符串模板,表示計(jì)算{}內(nèi)表達(dá)式的值并且拼接到字符串上
*/
Kotlin中弧圆,字符串的值除了像Java那樣用
" "
表示之外赋兵,還有一種""" """
表示的字符串。""" """
中的字符串叫做原始字符串搔预,即字符串里面是怎樣霹期,字符串就是怎樣的,不需要做字符的轉(zhuǎn)義拯田。但是如果你真的是想在""" """
中表示一個(gè)美元符號$
历造,而不是${xx}
中的$
,那只能寫成${'$'}
Array
目前在我看來船庇,也是跟Java中的數(shù)組類型差不多的吭产。
其它
我們知道,在Java中鸭轮,如果不給基本類型變量賦值臣淤,變量都會有一個(gè)默認(rèn)值。
但是在Kotlin中窃爷,必須要顯式的給變量賦值邑蒋。關(guān)于這一點(diǎn),其實(shí)也很好理解按厘。因?yàn)镵otlin雖然是一種靜態(tài)語音医吊,但是他是支持類型推斷的。
var b = 1 //Kotlin類型推斷逮京,b為int類型
var c:Int =2 //當(dāng)然也可以顯示的聲明類型
var d //error, 這個(gè)地方就支持了卿堂,因?yàn)闊o法推斷變量類型(如果是類成員,這張寫法是支持的懒棉,可以在初始化代碼塊中初始化d)
var e: Int //error 這也是不支持的御吞,我想大概是為了跟上面例子中的情況保持一致吧