瘋狂kotlin講義連載之Kotlin的基礎類型--整型

與Java相似,Kotlin也提供了4種整型。html

  • Byte:Byte型整數在內存裏一般佔8位,表數範圍是:-128~127。兼容Java的byte和Byte類型。
  •  Short:Short型整數在內存裏佔16位,表數範圍是:-32768(-215)~32767(215-1)。兼容Java的short和Short類型。
  •  Int:Int型整數在內存裏佔32位,表數範圍是:-2147483648(-231)~-2147483647(231-1)。兼容Java的int和Integer類型。
  •  Long:Long型整數在內存裏佔64位,表數範圍是:-263~263-1。兼容Java的long和Long類型。

當程序直接給出一個較大的整數時,該整數默承認能就是Long型,若是將這個整數賦值給Int、Short或Byte型,編譯器將會報錯。android

例如以下代碼。編程

程序清單:codes\02\2.3\IntVarTest.kt安全

fun main(args: Array<String>) {app

// 下面代碼是正確的ide

var a:Int = 56post

// 下面代碼須要隱式地將2999999999轉換爲Int型使用,所以編譯器將會報錯spa

var bigValue : Int = 2999999999code

// 下面代碼是正確的orm

var bigValue2: Long = 2999999999

println(bigValue)

println(bigValue2)

println(Short.MIN_VALUE)

println(Short.MAX_VALUE)

}

上面程序中粗體字代碼將2999999999做爲Int型變量的初始值,但2999999999的值處於Long的取值範圍內,所以2999999999將被當成Long型使用。故而上面這條粗體字代碼報錯。

提示:通常來講,開發者應該儘可能使用Int型就足夠了,這樣能夠提升代碼的一致性和可複用性。

因爲Int型是Kotlin最經常使用的整數類型,所以,若是聲明一個常量或變量時沒有指定數據類型,只是簡單地指定了其初始值爲整數值,那麼Kotlin會自動判斷該變量的類型爲Int。

Kotlin的整型與Java的整型不一樣,Kotlin的整型不是基本類型,而是引用類型(大體至關於Java的包裝類),Byte、Short、Int、Long都繼承了Number類型,所以這些Byte、Short、Int、Long均可調用方法、訪問屬性。

程序可經過訪問不一樣整數類型的MIN_VALUE和MAX_VALUE屬性來獲取對應類型的最大值和最小值。例如以下代碼(程序清單同上):

println(Short.MIN_VALUE)

println(Short.MAX_VALUE)

有一點須要提早說明的是:Kotlin是null安全的語言,所以Byte、Short、Int、Long型變量都能不接受null值,若是要存儲null值,應該使用Byte?、Short?、Int?、Long?類型。例如以下代碼(程序清單同上):

// Int型變量不支持null值,因此下面代碼是錯誤的

var notNull: Int = null

// Int?至關於支持null值的Int型,因此下面代碼是正確的

var nullable: Int? = null

因而可知,Kotlin語言容許在已有數據類型後添加?,添加?後的數據類型至關於對原有類型進行了擴展,帶?的數據類型可支持被賦值null值。

此外,整型類型添加?後綴與不加後綴還有一個區別:普通類型的整型變量,將會映射成Java的基本類型;帶?後綴的的整型變量,將會映射成基本類型的包裝類。舉例來講,Kotlin程序中Int類型的變量將會映射成Java的int基本類型,但Int?類型的變量則會自動映射成Java的Integer類型。例如以下代碼(程序清單同上):

var pm1: Int = 200; // pm1的類型是Java的int類型

var pm2: Int = 200; // pm2的類型是Java的int類型

println(pm1 === pm2); // 基本類型比較,輸出true

var ob1: Int? = 200; // ob1的類型是Java的Integer類型

var ob2: Int? = 200; // ob2的類型是Java的Integer類型

println(ob1 === ob2); // 引用類型比較,輸出false

上面代碼中因爲pm一、pm2兩個變量都映射成Java的基本類型,所以即便用===比較相等(該元算賦要求兩個變量引用同一個對象)也返回true;但ob一、ob2兩個變量都映射成Java的Integer對象,此時用ob1和ob2再也不引用同一個對象,所以它們用===比較返回false。

注意:若是將ob一、ob2的值改成小於-128~127之間的整數,上面ob1和ob2用===比較依然是相等的,這是因爲Java的Integer類的特徵決定,關於這一點可參考《瘋狂Java講義》6.2節。

Kotlin的整數數值有3種表示方式。

  •  十進制:最普通的整數就是十進制的整數。
  •  二進制:以0b或0B開頭的整數就是二進制的整數。
  •  十六進制:以0x或0X開頭的整數就是十六進制的整數,其中10~15分別以a~f(此處的a~f不區分大小寫)來表示。

注意:Kotlin不支持八進制整數。

下面代碼片斷分別使用了二進制、十六進制的數。

程序清單:codes\02\2.3\HexTest.kt

fun main(args: Array<String>) {

// 以0b或0B開頭的整數數值是二進制的整數

var binValue1 = 0b1010101

var binValue2 = 0B10101110

// 以0x或0X開頭的整數數值是十六進制的整數

var hexValue1 = 0x13

var hexValue2 = 0XaF

println("binValue1的值爲:${binValue1}")

println("binValue2的值爲:${binValue2}")

println("hexValue1的值爲:${hexValue1}")

println("hexValue2的值爲:${hexValue2}")

}

上面代碼中用到了字符串模板:也就是在字符串中嵌入${}的形式,該${}內可放入變量或表達式,Kotlin會將該變量或表達式的值「嵌入」該字符串內。

爲了提升數值(包括浮點型)的可讀性,Kotlin容許爲數值(包括浮點型)增長下畫線做爲分隔符,也能夠在數值前添加額外的零。這些下畫線和零並不會影響數值自己。例如以下代碼(程序清單同上):

val oneMillion = 1_000_000

val price = 234_234_234 // price實際的值爲234234234

val android = 1234_1234 // android實際的值爲12341234

以上內容節選自《瘋狂Kotlin講義》:一本讓您最直接認識Kotlin的瘋狂講義
本書即將於2017年11月發售 敬請期待
往期連載
相關書籍《瘋狂Android講義》https://item.jd.com/11689014.html
相關文章
相關標籤/搜索