Kotlin从0到1——变量、常量、字符串、数组
Kotlin中一切都是对象。虽然有一部分类型是内置的——系统优化了它们的操作,但是它们看起来跟一般的类一样。下面我们通过常量、变量、字符串、数组的操作来了解一部分基础类型。
1. 变量和常量
1.1 常量的定义
val
关键字声明定义常量——只赋值一次的变量(只读变量)。
val i:Int = 6 //即刻给变量 i 赋值
以上代码中 val
是 kotlin 中的关键字; i
是变量名; Int
是Kotlin中的Int类型的数字类型; 6
是数字字面常量; =
表示将 6
赋值给变量 i
。
1.2 变量的定义
var
关键字声明定义变量
var jj:Int = 66
以上代码中 var
是 kotlin 中的关键字; j
是变量名; Int
是Kotlin中的Int类型的数字类型; 66
是数字字面常量; =
表示将 66
赋值给变量 j
。
1.3 其它示例代码
val k:Int // 声明变量 k ,冒号后面的 Int 必须加上(标明 k 的数据类型)
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
等都是字面量常量。它们都是数字,因此也称为数字字面量常量。
1.5 数据类型
以上代码中的 Byte
,Int
,Long
,我们称为数据类型。查看部分Kotlin数据类型表。
2. 字符串
2.1 字符
字符用 Char
类型表示。Kotlin
和 Java
不同,字符不能直接用数字表示。用法示例:
val c:Char = '1' // 数字字符
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节</a>。以上代码中,字符串 "xyz" 就是字符串字面量,其它一些字面量常量举例:
println("Hello world , printed by kotlin .")
print("\n")
// 多行字符串字面量
"""
multiline
string
literal .
"""
2.5 字符串模板
字符串中支持 “模板表达式”,它以 $
符号开始后面可以接一个变量(常量)名或者表达式。示例代码如下:
val x = 7
var s = "x = $x" // $后接变量名,s 结果为 x = 7
var s1 = "x+12=${x+12}" // $后接表达式, s1 结果为 x+12=19
3. 数组
Kotlin 中数组用类 Array
表示。 它拥有 size
属性 和 set
,get
等方法. 以下是Array.kt 文件部分内容:
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>
}
我们可以通过以下标准库方法创建一个数组:
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
以下是一些创建数组的示例代码:
var arr = Array(3,{i->i+1}) //通过构造函数创建数组Array<int>
var arr1 = arrayOf(1,"2sd","33",56) // 通过标准库创建数组Array<Any>
// 通过标准库创建元素可为空,初始大小为16的数组 Array<Int?>, arr2后必须指定数组元素类型
var arr2:Array<Int?> = arrayOfNulls(16)
//以下代码将无法编译通过
var arrTmp = arrayOfNulls(16)
var arrInt = intArrayOf(2,4,5)
数组内容访问和修改示例代码:
var arr3 = arrayOf(1,"df","2334",89)
var itemInteger = arr3[0] // 通过下标访问数组第一个元素
arr3[2] = 8 // 通过下标修改数组第三个元素
var getInteger = arr3.get(3) //通过数组方法访问第4个元素
arr3.set(1,66) //通过数组方法修改第二个元素
for (item in arr3) { // 数组遍历
print(item)
print("\t")
println(item.javaClass)
}