Kotlin中一切都是對象。雖然有一部分類型是內(nèi)置的——系統(tǒng)優(yōu)化了它們的操作,但是它們看起來跟一般的類一樣。下面我們通過常量、變量、字符串、數(shù)組的操作來了解一部分基礎類型。
1. 變量和常量
1.1 常量的定義
val關鍵字聲明定義常量——只賦值一次的變量(只讀變量)。
val i:Int = 6 //即刻給變量 i 賦值
以上代碼中 val是 kotlin 中的關鍵字; i 是變量名; Int 是Kotlin中的Int類型的數(shù)字類型; 6 是數(shù)字字面常量; = 表示將 6 賦值給變量 i。
1.2 變量的定義
var關鍵字聲明定義變量
var jj:Int = 66
以上代碼中 var是 kotlin 中的關鍵字; j 是變量名; Int 是Kotlin中的Int類型的數(shù)字類型; 66 是數(shù)字字面常量; = 表示將 66 賦值給變量 j。
1.3 其它示例代碼
val k:Int // 聲明變量 k ,冒號后面的 Int 必須加上(標明 k 的數(shù)據(jù)類型)
val m = 666 // 立刻賦值,自動類型推斷,m為Int默認類型
val j:Long // 變量聲明
j = 23 // 延遲初始化
val p:Int? // 申明一個取值可以為 null的變量 p
p = 23
val q:Long? = p // 類型不匹配,不能賦值 , 提示錯誤
var a:Int = 6 // 定義變量,并賦值
a+=12 // 將變量取值與 12 相加,然后賦值給變量a
1.4 字面量常量
<a name="literal_definition">字面量用于表示 源代碼 中一個固定值的表示法。</a>比如:上文中的 6,23,23l等都是字面量常量。它們都是數(shù)字,因此也稱為數(shù)字字面量常量。
1.5 數(shù)據(jù)類型
以上代碼中的 Byte,Int,Long,我們稱為數(shù)據(jù)類型。查看部分Kotlin數(shù)據(jù)類型表。
2. 字符串
2.1 字符
字符用 Char 類型表示。Kotlin 和 Java 不同,字符不能直接用數(shù)字表示。用法示例:
val c:Char = '1' // 數(shù)字字符
var c1 = 'a' // 字母字符
var c2 = '\n' // 特殊字符
var c3 = '愛' // Kotlin采用unicode編碼,支持中文字符
錯誤用法示例:
var c:Char = 'a'
if(c == 92){ // 提示編譯錯誤 , == 兩邊類型不匹配
}
Kotlin中部分特殊字符舉例: \",\',\n,\t,\b,\r,\$,\\\\。
2.2 字符串的定義
String表示字符串類型,它是不可變的。如:
var str:String // 聲明 str 是一個字符串
str = "xyz" // 延遲賦值,將字符串 "xyz" 賦值給變量str
val constStr: String = str // 字符串常量
var str2:String? = null // 將 null 賦值給 str2 , str 不能賦值為null
2.3 多行字符串
Kotlin中用三引號 """ """ 表明這是一個多行字符串,以下是示例代碼:
var mulLine:String = """ // 多行字符串示意代碼
this
is
multiline
string
literal.
"""
2.4 字符串字面量
字面量的定義參見<a href="#literal_definition">1.4節(jié)</a>。以上代碼中,字符串 "xyz" 就是字符串字面量,其它一些字面量常量舉例:
println("Hello world , printed by kotlin .")
print("\n")
// 多行字符串字面量
"""
multiline
string
literal .
"""
2.5 字符串模板
字符串中支持 “模板表達式”,它以 $ 符號開始后面可以接一個變量(常量)名或者表達式。示例代碼如下:
val x = 7
var s = "x = $x" // $后接變量名,s 結(jié)果為 x = 7
var s1 = "x+12=${x+12}" // $后接表達式, s1 結(jié)果為 x+12=19
3. 數(shù)組
Kotlin 中數(shù)組用類 Array 表示。 它擁有 size屬性 和 set ,get 等方法. 以下是Array.kt 文件部分內(nèi)容:
package kotlin
/**
* Represents an array (specifically, a Java array when targeting the JVM platform).
* Array instances can be created using the [arrayOf], [arrayOfNulls] and [emptyArray]
* standard library functions.
*/
public class Array<T> {
public inline constructor(size: Int, init: (Int) -> T)
public operator fun get(index: Int): T
public operator fun set(index: Int, value: T): Unit
public val size: Int
public operator fun iterator(): Iterator<T>
}
我們可以通過以下標準庫方法創(chuàng)建一個數(shù)組:
public fun <reified @PureReifiable T> arrayOfNulls(size: Int): Array<T?>
public inline fun <reified @PureReifiable T> arrayOf(vararg elements: T): Array<T>
public fun doubleArrayOf(vararg elements: Double): DoubleArray
public fun floatArrayOf(vararg elements: Float): FloatArray
public fun longArrayOf(vararg elements: Long): LongArray
public fun intArrayOf(vararg elements: Int): IntArray
public fun charArrayOf(vararg elements: Char): CharArray
public fun shortArrayOf(vararg elements: Short): ShortArray
public fun byteArrayOf(vararg elements: Byte): ByteArray
public fun booleanArrayOf(vararg elements: Boolean): BooleanArray
@SinceKotlin("1.1")
public inline fun <reified T : Enum<T>> enumValues(): Array<T>
@SinceKotlin("1.1")
public inline fun <reified T : Enum<T>> enumValueOf(name: String): T
以下是一些創(chuàng)建數(shù)組的示例代碼:
var arr = Array(3,{i->i+1}) //通過構造函數(shù)創(chuàng)建數(shù)組Array<int>
var arr1 = arrayOf(1,"2sd","33",56) // 通過標準庫創(chuàng)建數(shù)組Array<Any>
// 通過標準庫創(chuàng)建元素可為空,初始大小為16的數(shù)組 Array<Int?>, arr2后必須指定數(shù)組元素類型
var arr2:Array<Int?> = arrayOfNulls(16)
//以下代碼將無法編譯通過
var arrTmp = arrayOfNulls(16)
var arrInt = intArrayOf(2,4,5)
數(shù)組內(nèi)容訪問和修改示例代碼:
var arr3 = arrayOf(1,"df","2334",89)
var itemInteger = arr3[0] // 通過下標訪問數(shù)組第一個元素
arr3[2] = 8 // 通過下標修改數(shù)組第三個元素
var getInteger = arr3.get(3) //通過數(shù)組方法訪問第4個元素
arr3.set(1,66) //通過數(shù)組方法修改第二個元素
for (item in arr3) { // 數(shù)組遍歷
print(item)
print("\t")
println(item.javaClass)
}