Kotlin_lesson_01_基本型別

germo發表於2021-09-09

基本型別

數字型別

Type Bit width
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

java不同的是characters不再是基本數字型別。

數值的表示

  • 十進位制:123 (Long:123L)

  • 16進位制:0x0F

  • 二進位制:0b00001011

不支援八進位制

kotlin也支援浮點數值

  • Double:123.5,123.5e10

  • Float(f or F為數值字尾):123.5f

下劃線在數值中的使用

可以用下劃線去分割數值,增加數值可讀性

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

表現形式

在java平臺,數字型別是以JVNM基本位元組的形式存在實體記憶體中,除非需要空的數字引用(e.g. Int?)或者是泛型引用。後者數字型別會進行封箱。

需要注意的是封箱不會保證引用同一實體地址。

val a: Int = 10000print(a === a) // Prints 'true'val boxedA: Int? = a
val anotherBoxedA: Int? = aprint(boxedA === anotherBoxedA) // !!!Prints 'false'!!!

另一方面只會保證其對應的數值相等

val a: Int = 10000print(a == a) // Prints 'true'val boxedA: Int? = a
val anotherBoxedA: Int? = aprint(boxedA == anotherBoxedA) // Prints 'true'

精確的型別轉換

由於不同的表現形式,較小的資料型別時不能代表較大的資料型別,會發生意想不到的事情:

// Hypothetical code, does not actually compile:val a: Int? = 1 // A boxed Int (java.lang.Integer)val b: Long? = a // implicit conversion yields a boxed Long (java.lang.Long)print(a == b) // Surprise! This prints "false" as Long's equals() check for other part to be Long as well

不僅僅是型別不同,就連數值也是不同的

val b: Byte = 1 // OK, literals are checked statically val i: Int = b // ERROR

我們可以精確的做型別轉換:

val i:Int=b.toInt()

所有的數值型別都支援以下的型別轉換:

  • toByte(): Byte

  • toShort(): Short

  • toInt(): Int

  • toLong(): Long

  • toFloat(): Float

  • toDouble(): Double

  • toChar(): Char

就“長”原則,例如:

val l = 1L + 3 // Long + Int => Long

Booleans(布林)

Boolean有兩個值:true,false

Boolean也是引用型別,可以為null

Boolean運算子有:

  • ||-或(左邊若為true,就不會去管右邊)

  • &&-且(左邊false,就不會去管右邊)

  • !-非

Arrays

陣列在kotlin中用Array來表示,它有getset方法,size屬性,還有其它一些比較實用的成員方法:

class Array private constructor() { val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator// ...}

建立Array的方法:

val array= arrayOf(1,2,3)//-->array[1,2,3]//建立指定型別和長度的空陣列val array= arrayOfNulls(3) // Creates an Array with values ["0", "1", "4", "9", "16"]val asc = Array(5, { i -> (i * i).toString() })

Strings

字串有String來表示。String是不可變的,String中的元素可以用s[i]表示,也可一使用for迴圈:

for (c in str) { println(c)
}

kotlin中,有兩種字元值型別的字串,一種是包含跳脫字元的字串,另一種是原始字串就想java中的String

val s = "Hello, world!n"

多行字串可以用"""來包裹,裡面不能包含跳脫字元

val text = """
for (c in "foo")
print(c) """

當然你可以刪除縮緊,用trimMargin()方法來設定字首:

val text = """
|Tell me and I forget. 
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin) """.trimMargin()

|是預設的字首,你可以自定義字首如trimMargin(">")

字串模版

//$為識別符號,後面直接跟要填充的變數名
val i = 10val s = "i = $i" // evaluates to "i = 10"//可以用任意的表示式做模版
val s = "abc"val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"//$是關鍵字,需要轉義為${'$'}
val pri ce = """
${'$'}9.99
"""

原文連結:http://www.apkbus.com/blog-302849-68054.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2814289/,如需轉載,請註明出處,否則將追究法律責任。

相關文章