Kotlin从0到1——变量、常量、字符串、数组

2017-07-30  本文已影响0人  我是我我也不是我

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>比如:上文中的 62323l等都是字面量常量。它们都是数字,因此也称为数字字面量常量。

1.5 数据类型

以上代码中的 ByteIntLong,我们称为数据类型。查看部分Kotlin数据类型表。

2. 字符串

2.1 字符

字符用 Char 类型表示。KotlinJava 不同,字符不能直接用数字表示。用法示例:

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属性 和 setget 等方法. 以下是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)
}
上一篇下一篇

猜你喜欢

热点阅读