首頁>技術>

Boolean 型別

示例程式碼:

val aBoolean: Boolean = trueval anotherBoolean: Boolean = false

kotlin 中的 Boolean 在多數情況下,相當於 Java 中基本型別 boolean,只有在必要情況下才會裝箱成 Java 中的裝箱型別 Boolean,由編譯器決定,通常我們不需要關心。

Number 型別

Number 即數字,主要包括整型和浮點型:

分類型別位寬浮點型Double64Float32整型Long64Int32Short16位元組Byte8

Int 型別

kotlin 的 Int 型別跟 Java 中的 int 一樣,可以用整數、十六進位制、二進位制寫法表示:

val anInt: Int = 8 // 8val anotherInt: Int = 0xFF // 255val moreInt: Int = 0b00000011 // 3val maxInt: Int = Int.MAX_VALUE // 2147483647val minInt: Int = Int.MIN_VALUE // -2147483648

整型是有符號的數,整型的最高位是符號位,剩下的 31 位表示數值範圍,最大值是Math.pow(2.0, 31.0) - 1,最小值是-Math.pow(2.0, 31.0)

Long 型別

Long 型別與 Int 型別相似,只是 Int 型別是 32 位,而 Long 型別是 64 位,能表示更大的數:

val aLong: Long = 12345678987654321 // 12345678987654321val anotherLong: Long = 123 // 123val maxLong: Long = Long.MAX_VALUE // 9223372036854775807val minLong: Long = Long.MIN_VALUE // -9223372036854775808

因為 anotherLong 強制指定了 Long 型別,所以對應的值 123 是 Long 型別,而 println(123) 中的 123 則是 Int 型別,如果需要指定為 Long 型別的話,可以這樣來書寫 println(123L)。

Float 型別

Float 即單精度浮點數,是帶有小數的數,Float 型別的數值表示必須在末尾加上 F 或 f,否則編譯會認為是 Double 型別。

val aFloat: Float = 2.0F // 2.0val anotherFloat: Float = 1E3f // 1000.0val maxFloat: Float = Float.MAX_VALUE // 3.4028235E38val minFloat: Float = Float.MIN_VALUE // 1.4E-45val minFloatReal: Float = -Float.MAX_VALUE // -3.4028235E38val positiveInfinityFloat: Float = Float.POSITIVE_INFINITY // 正無窮,輸出 Infinityval negativeInfinityFloat: Float = Float.NEGATIVE_INFINITY // 負無窮,輸出 -Infinit

要注意 Float.MIN_VALUE 指最小非 0 正數!最小非 0 正數!最小非 0 正數!如果想表示帶符號的最小浮點數則需要使用 -Float.MAX_VALUE。

以下是 Kotlin 中 Float 的部分原始碼註釋:

/** * Represents a single-precision 32-bit IEEE 754 floating point number. * On the JVM, non-nullable values of this type are represented as values of the primitive type `float`. */public class Float private constructor() : Number(), Comparable<Float> {    companion object {        /**         * A constant holding the smallest *positive* nonzero value of Float.         */        public val MIN_VALUE: Float        /**         * A constant holding the largest positive finite value of Float.         */        public val MAX_VALUE: Float    }}

NaN

Float 擁有一個 NaN 常量屬性,表示"不是一個數"的數,什麼情況下會得到 NaN 呢?

println(0.0f / 0.0f) // NaNprintln(0.0f / 0.0f == Float.NaN) // false

透過上述 Demo 可以得出 2 個結論:

除零可以得到 NaNNaN 跟任何 NaN 結果不是相等的

NaN 表示 "不是一個數" ,所以比較起來沒有意義。

Double 型別

Double 即雙精度浮點數(或多精度浮點數),Double 之於 Float 就如同 Long 之 Int,故 Double 其實就是比 Float 能表示更大的浮點數而已。

val aDouble: Double = 3.0 // 3.0val anotherDouble: Double = 3.1415926 // 3.1415926val maxDouble: Double = Double.MAX_VALUE // 1.7976931348623157E308val minDouble: Double = Double.MIN_VALUE // 4.9E-324val minDoubleReal: Double = -Double.MAX_VALUE // -1.7976931348623157E308

Double 與 Float 一樣,Double.MIN_VALUE 表示的是最小非 0 正數。

Short 型別

Short 也稱短整型,位寬比 Int 少一半,即 16 位:

val aShort: Short = 127 // 127val maxShort: Short = Short.MAX_VALUE // 32767val minShort: Short = Short.MIN_VALUE // -32768

因為 Short 是 16 位的有符號數,所以 Short 能表示的最大數值是2 的 15 次減 1,即:Math.pow(2.0, 15.0) - 1。

Byte 型別

Byte 型別比 Short 型別更短,一般只用來處理二進位制資料流:

val maxByte: Byte = Byte.MAX_VALUE // 127val minByte: Byte = Byte.MIN_VALUE // -128
基本型別轉換

Java 支援使用 long 型別或 float 型別變數接收一個 int 型別變數,且不報錯,這是因為 Java 支援隱式轉換,但這在 Kotlin 中是行不通的,Kotlin 不支援隱式轉換,舉個例子:

val anInt: Int = 5val aLong: Long = anInt // 報錯:Type mismatchval aLong: Long = anInt.toLong() // 正常
Char 型別Char 稱為字元,對應 Java 的 CharacterChar 佔兩個位元組,表示一個 16 位的 Unicode 字元Char 需要用單引號 '' 引起來,例如:'0','a','\n'
val aChar: Char = '0' // 0val bChar: Char = '林' // 林val cChar: Char = '\t' // 看不見的製表符val dChar: Char = '\u9510' // 銳

Char 表示一個字元,其值的書寫可以是字母、數字、Unicode、以及類似 \n 的特殊字元。

還有一些符號,在語法上有特殊作用的,想要輸出它原本的樣子,需要藉助 \ 進行轉義:

跳脫字元含義\t製表符\b游標後退一個字元\n回車\r游標回到行首\'單引號\"雙引號\\反斜槓\$美元符號,Kotlin 支援美元符號開頭的字串模板

val eChar: Char = '\'' // 'val fChar: Char = '"' // "val gChar: Char = '\"' // "val hChar: Char = '\$' // $val iChar: Char = '\\' // \
String 型別

String 字串,即一連串的字元,字元 Char 使用 ''引起來,字串 String 則使用 ""引起來:

val aString: String = "HelloWorld" // HelloWorldval anotherString: String = String(charArrayOf('H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd')) // HelloWorldprintln(aString == anotherString) // trueprintln(aString === anotherString) // falseprintln(aString.length) // 10

這裡的 == 實際上就是 equals(),判斷值是否相同;而 === 是全等運算子,除了判斷值是否相等,還會判斷地址是否也相同,只有值與地址都相等的情況下才會為 true。

字串模板,可以在字串中使用 $ 符號引入其他變數:

println("輸出一個字串:" + aString) // HelloWorldval arg1: Int = 0val arg2: Int = 1println("$arg1 + $arg2 = ${arg1 + arg2}") // 0 + 1 = 1

單個變數使用 $ 即可,表示式則需要使用 ${}

字串除了可以用 "" 引起來,還可以使用 """""" (3 個引號)引起來,3 引號字串比雙引號字串更強大,包括換行也會被識別,不需要藉助 \n ,但同時這些跳脫字元也就無效了,可以理解為是最原始的字串。

// 輸出結果://    \t \n//    |哈哈哈val rawString: String = """    \t \n    |哈哈哈    """val rawString1: String = """$aString  \$aString""" // HelloWorld  \HelloWorldval rawString2: String = """$ aString""" // $ aString

三引號字串支援字串模板,即支援使用 $ 引入變數,且無法使用 \ 對 $ 進行轉義!

13
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Day14-Python if條件判斷語句-基本用法