基本類型
Kotlin 只有Int阻肿,不區(qū)分int和Integer希停,編譯器自動(dòng)區(qū)分裝箱和非裝箱類型
不可隱式轉(zhuǎn)換
java中將int值賦給Long類型毫蚓,可以自動(dòng)轉(zhuǎn)換扇丛,kotlin會(huì)提示錯(cuò)誤
val anInt: Int = 5
val aLong: Long = anInt //IDE會(huì)提示錯(cuò)誤
val anLong: Long = anInt.toLong()
字符串的比較
‘==’ 與equals方法等價(jià)绿映,用于比較內(nèi)容
val string:String = "Hello"
val fromChars:String = String(charArrayOf('H','e','l','l','o'))
fun main(args: Array<String>) {
print(string == fromChars)// true
print(string === fromChars) // false
}
public open operator fun equals(other: Any?): Boolean
而在kotlin中與Java的‘ == ’ 操作符等價(jià)的是 ‘===’扛芽,比較對象是否相同
字符串模板(拼接字符串)
Java中
val arg1:Int = 3
val arg2:Int = 2
println(""+arg1+" + "+arg2+" = "+(arg1+arg2))
而在kotlin中
println("$arg1 + $arg2 = ${arg1+arg2}")
打印結(jié)果會(huì)一模一樣骂蓖,但看起來會(huì)優(yōu)雅很多。后面得跟上花括號{},而不是括號()叮喳。
轉(zhuǎn)義字符
- 如果要打印 Hello "Shaoxia",需要在"前面加上反斜杠“\”
//Hello "Shaoxia"
val sayHello : String = "Hello\"Shaoxia\""
println(sayHello)
- $的特殊化
//打印 $1000
val salary: Int = 1000
println("$1000")//①
println("$$salary")//②
//打印 $salary
println("\$salary")//③
①與②的執(zhí)打印果完全一樣,③加了反斜杠把$轉(zhuǎn)為了字符
image
- 輸入原始字符串
使用三個(gè)引號包起來被芳,可以無視轉(zhuǎn)義字符,輸出原始數(shù)據(jù)
val rawString:String = """
\t
\n
\t
""""
println(rawString)
輸出結(jié)果
image
類與對象
構(gòu)造與初始化
創(chuàng)建一個(gè)MeiZi類馍悟,包含了構(gòu)造函數(shù)
class MeiZi(var character:String,var appearance: String ,var voice: String)
這個(gè)構(gòu)造函數(shù)省略了constructor和{},它與下面的兩條語句等價(jià)
class MeiZi constructor(var character:String,var appearance: String ,var voice: String)
class MeiZi constructor(var character:String,var appearance: String ,var voice: String){}
如果要做初始化操作畔濒,可以重寫init()函數(shù),kotlin 構(gòu)造對象不用像Java需要new關(guān)鍵字锣咒,直接調(diào)用構(gòu)造函數(shù)即可
class MeiZi constructor(var character: String, var appearance: String, var voice: String) {
init {
println("new了一個(gè)妹子侵状,這個(gè)妹子性格:$character,外貌$appearance,聲音$voice")
}
}
fun main(args: Array<String>) {
val meiZi: MeiZi = MeiZi("溫柔", "甜美", "動(dòng)人")
}
輸出結(jié)果
image
繼承
- 繼承不再像Java需要extend關(guān)鍵字,而是用冒號“:”來取代
- 所有類繼承于Any類
注意毅整,子類的構(gòu)造參數(shù)前面不能寫var,IDE會(huì)提示'xxx' hides member of supertype 'XXX' and needs 'override' modifier趣兄,下面錯(cuò)誤示范
class MeiZi(var character: String, var appearance: String, var voice: String): HuMan(character, appearance, voice)
正確例子
class MeiZi(character: String, appearance: String, voice: String): HuMan(character, appearance, voice)
class Man(character: String, appearance: String, voice: String): HuMan(character, appearance, voice)
open class HuMan(var character: String, var appearance: String, var voice: String) {
init {
println("new了一個(gè)${this.javaClass.simpleName},這個(gè)妹子性格:$character,外貌$appearance,聲音$voice")
}
}
fun main(args: Array<String>) {
val meiZi: HuMan = MeiZi("溫柔", "甜美", "動(dòng)人")
val man: HuMan = Man("粗魯", "彪悍", "洪亮")
val huMan: HuMan = HuMan("豪爽", "清新", "撩人")
}
輸出
image
- Java判斷一個(gè)對象是否是類的實(shí)例用instanceof悼嫉,而Kotlin用is
val meiZi: MeiZi = MeiZi("溫柔", "甜美", "動(dòng)人")
println(meiZi is HuMan) // true