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>比如:上文中的 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)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容