在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Kotlin數(shù)據(jù)類型
Kotlin內(nèi)聯(lián)函數(shù)
Kotlin開發(fā)環(huán)境設置(Eclipse)
Kotlin調用Java代碼
Kotlin使用Ant
Kotlin編譯器插件
Kotlin相等性
Kotlin JavaScript模塊
編寫Kotlin代碼文檔
Kotlin返回和跳轉
Kotlin異常處理
Kotlin可見性修飾符
Kotlin委托
Kotlin委托屬性
Kotlin編碼約定/編碼風格
Kotlin基礎語法
使用Kotlin進行服務器端開發(fā)
Kotlin接口
Kotlin反射
Kotlin類型別名
Kotlin枚舉類
Kotlin當前版本是多少?
Kotlin注解處理工具
Kotlin類型的檢查與轉換
Kotlin屬性和字段
Kotlin類型安全的構建器
Kotlin相比Java語言有哪些優(yōu)點?
Kotlin JavaScript反射
Kotlin 是什么?
Kotlin泛型
Kotlin慣用語法
Kotlin與OSGi
Kotlin數(shù)據(jù)類型
Kotlin是面向對象還是函數(shù)式語言?
Kotlin動態(tài)類型
Kotlin協(xié)程
Kotlin操作符符重載
Kotlin使用Gradle
Kotlin密封類
Kotlin兼容性
Kotlin集合
Kotlin調用JavaScript
Kotlin null值安全
Kotlin函數(shù)
Kotlin開發(fā)環(huán)境設置(IntelliJ IDEA)
Kotlin嵌套類
Kotlin控制流程
Kotlin和Java語言比較
Kotlin 與 Java 語言兼容嗎?
Kotlin教程
Kotlin類和繼承
Kotlin對象表達式和對象聲明
JavaScript中調用Kotlin
Kotlin區(qū)間/范圍
Kotlin數(shù)據(jù)類
Kotlin lambda表達式
Kotlin是免費的嗎?
Kotlin包
使用Kotlin進行Android開發(fā)
在Java中調用Kotlin代碼
Kotlin this表達式
使用Kotlin進行JavaScript開發(fā)
Kotlin擴展
Kotlin解構聲明
Kotlin注解
Kotlin使用Maven

Kotlin數(shù)據(jù)類型

在Kotlin中,一切都是一個對象,可以在任何變量上調用成員函數(shù)和屬性。 一些類型是內(nèi)置的,因為它們的實現(xiàn)被優(yōu)化,但是它們看起來像普通類。 在本節(jié)中,我們將介紹描述Kotlin中的大多數(shù)類型:數(shù)字,字符,布爾和數(shù)組等等。

數(shù)字類型

Kotlin以接近Java的方式來處理數(shù)字,但不完全相同。 例如,數(shù)字沒有隱含的擴展轉換,在某些情況下,字面量略有不同。

Kotlin提供以下代表數(shù)字的內(nèi)置類型(這接近Java):

類型 位寬度
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

注意,字符不是Kotlin中的數(shù)字。

字面常量/文字常量

對于整數(shù)值,有以下幾種字面常量:

  • 整數(shù):123
  • 長整數(shù)由大寫L標記:123L
  • 十六進制:0x0F
  • 二進制:0b00001011

注意:不支持八進制字面常量。

Kotlin還支持一個常規(guī)的浮點數(shù)符號:

  • 默認為Double123.5, 123.5e10
  • 浮點數(shù)標記為fF123.5f

數(shù)字字面常量的下劃線

可以使用下劃線使數(shù)字常量更易讀:

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平臺上,數(shù)字被物理存儲為JVM原始類型,除非需要一個可空的數(shù)字引用(例如Int?)或涉及泛型。 在后一種情況下,數(shù)字是裝箱的。

請注意,裝箱數(shù)字不一定保持身份:

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

另一方面,它保持相等:

val a: Int = 10000
print(a == a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(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

因此,較小的類型不會被隱式轉換為更大的類型。 這意味著不能在沒有顯式轉換的情況下將Byte類型的值賦給Int類型的變量。

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

可以使用顯式轉換來擴寬數(shù)字 -

val i: Int = b.toInt() // OK: explicitly widened

每個數(shù)字類型都支持以下轉換:

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

缺少隱式轉換是很少引人注意的,因為類型是從上下文推斷出來的,而算術運算則被重載為適當?shù)霓D換,例如 -

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

操作

Kotlin支持對數(shù)字進行的算術運算的標準集合,它們被聲明為適當類的成員(但編譯器將調用優(yōu)化為相應的指令)。請參閱操作符重載。

對于按位操作,它們沒有特殊的字符,但是只能命名為可以以中綴形式調用的函數(shù),例如:

val x = (1 shl 2) and 0x000FF000

以下是按位操作的完整列表(僅適用于IntLong):

  • shl(bits) – 有符號向左移 (Java的<<)
  • shr(bits) – 有符號向右移 (Java’s >>)
  • ushr(bits) – 無符號向右移 (Java’s >>>)
  • and(bits) – 位運算符and
  • or(bits) – 位運算符or
  • xor(bits) – 位運算符xor
  • inv() – 位運算符”取反”

字符

字符由Char類型表示,它們不能直接被視為數(shù)字

fun check(c: Char) {
    if (c == 1) { // ERROR: incompatible types
        // ...
    }
}

字符文字用單引號表示:'1'。 可以使用反斜杠轉義特殊字符。 支持以下轉義序列: \t, \b, \n, \r,\', \", \\\$; 要編碼任何其他字符,請使用Unicode轉義序列語法:'\uFF00'。

可以將一個字符顯式轉換為一個Int類型數(shù)字:

fun decimalDigitValue(c: Char): Int {
    if (c !in '0'..'9')
        throw IllegalArgumentException("Out of range")
    return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}

像數(shù)字一樣,當需要可空引用時,字符將被包裝。標識不能被裝箱操作所保留。

布爾類型

Boolean類型表示布爾值,并具有兩個值:truefalse。

如果需要可空引用,布爾值將可被裝箱。

內(nèi)置的布爾操作包括:

  • || – 懶分離
  • && – 懶結合
  • ! - 否定

數(shù)組

Kotlin中的數(shù)組由Array類表示,它有get()set()函數(shù)(通過運算符重載約定轉換為[]),以及size屬性以及其他一些有用的成員函數(shù):

class Array<T> private constructor() {
    val size: Int
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Unit

    operator fun iterator(): Iterator<T>
    // ...
}

要創(chuàng)建一個數(shù)組,我們可以使用一個庫函數(shù)arrayOf(),并將數(shù)組的元素值傳遞給它,如:arrayOf(1,2,3)創(chuàng)建一個數(shù)組[1,2,3]。 或者arrayOfNulls()庫函數(shù)可用于創(chuàng)建一個填充空(null)元素的給定大小的數(shù)組。

另一個選擇是使用一個工廠函數(shù),它使用數(shù)組大小和返回給定其索引的每個數(shù)組元素的初始值的函數(shù):

// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })

如上所述,[]操作代表調用成員函數(shù)get()set()。

注意:與Java不同,Kotlin中的數(shù)組是不變的。 這意味著Kotlin不允許將Array <String>分配給Array <Any>,這樣可以防止可能的運行時故障(但可以使用Array <out Any>),詳細的可參考類型投影。

Kotlin還有專門的類來表示原始類型的數(shù)組,沒有裝箱開銷,它們分別是:ByteArray, ShortArray, IntArray等等。

這些類與Array類沒有繼承關系,但它們具有相同的方法和屬性集。它們也有相應的工廠函數(shù):

val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]

字符串

字符串由String類型表示。字符串是不可變的。 字符串的元素可以通過索引操作的字符:s[i]來訪問??梢允褂?code>for循環(huán)迭代字符串:

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

字符串字面量

Kotlin有兩種類型的字符串字面值:可以在其中轉義字符的轉義字符串,以及可以包含換行符和任意文本的原始字符串。 轉義的字符串非常像Java字符串:

val s = "Hello, world!\n"

使用反斜杠以常規(guī)方式完成轉義。 有關支持的轉義序列的列表,請參閱上述字符

原始字符串由三重引號(""")分隔,不包含轉義,并且可以包含換行符和任何其他字符:

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

可以使用trimMargin()函數(shù)刪除前導空格:

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

默認使用|作邊距前綴,但您可以選擇另一個字符,并將其作為參數(shù)傳遞:trimMargin(">")

字符串模板

字符串可以包含模板表達式,即被評估的代碼片段,并且其結果被連接到字符串中。 模板表達式以美元符號($)開頭以及簡單名稱組成:

val i = 10
val s = "i = $i" // evaluates to "i = 10"

或大括號中的任意表達式:

val s = "abc"
val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"

原始字符串和轉義字符串內(nèi)部都支持模板。如果您需要在原始字符串(不支持反斜杠轉義)中表示一個文字$字符,則可以使用以下語法:

val price = """
${'$'}9.99
"""