Kotlin 基本语法、简单函数、基本数据类型

Kotlin 基本语法、简单函数、基本数据类型


1. 语法

1. 不需要使用分号作为语句结束,直接 enter 就可以;

2. 定义一个简单的变量:

val aBoolean: Boolean = false

var bBoolean: Boolean = true
bBoolean = false
  1. val 定义一个常量,一旦赋值就不能第二次赋值了,类似于Java中的 final;当然还可以这样写
  • 注意区别:Java 中 final 是编译期常量,就是在编译阶段已经将 final 修饰的常量换成了它所对应的值,很像 c++ 中的
  • 而 Kotlin 中的 val 并不是编译期常量,编译器在编译的时候还是用的引用,并不会拿常量值去替换,如果在 val 前面添加一个 const 就和 Java 中的 final 修饰的是等价的,即
const val aBoolean: Boolean = false
val aBoolean = false

// 或者是这样
val aBoolean: Boolean
aBoolean = false
  1. var 定义一个变量;
  2. aBoolean bBoolean 变量名;
  3. Boolean 变量类型,注意与变量名之间用 : 隔开;
  4. 其实在直接赋值的情况下,编译器是可以推断出变量的类型的,此时可是可以省略 : Boolean 这个类型声明;

3. 简单的函数

  1. 这里先简单看一下主函数
fun main(args: Array<String>) {
    println("Hello Kotlin")
}
  • 以上就是一个 kotlin 的 main 函数,程序的入口;
  • fun 函数的标志;
  • main 函数名;
  • args 参数名;
  • Array<String> 参数类型;
  • 注意:函数无返回值,在 kotlin 中,无返回值用 Unit 表示,可省略,所以 main 函数的完整写法:
fun main(args: Array<String>): Unit {
    println("Hello Kotlin")
}

返回值放在参数列表后面,用 : 与参数列表隔开;

  1. 关于函数更多内容,Kotlin 中的函数

2. 基本数据类型

1. Boolean 取值 true/false;

2. Number类型:(主要包括整形和浮点型)

分类 类型 宽度
浮点型 Double 64(8字节)
浮点型 Float 32(4字节)
整型 Long 64(8字节)
整型 Int 32(4字节)
整型 Short 16(2字节)
字节 Byte 8(1字节)

2.1 Int

val aInt: Int = 8
val bInt: Int = 0xff // 255 十六进制
val cInt: Int = 0b00000011 // 3 二进制
val maxInt: Int = Int.MAX_VALUE // 2147483647,即 2^31-1
val minInt: Int = Int.MIN_VALUE // -2147483648,即 -2^31

2.2 Long

val aLong:Long = 1L // 必须是大写的 L ,显示声明时可省略
val bLong:Long = 2
val maxLong:Long = Long.MAX_VALUE // 9223372036854775807,即 2^63-1
val minLong:Long = Long.MIN_VALUE // -9223372036854775808,即 -2^63

2.3 Float

val aFloat:Float = 2.0f // 必须在后面加 f/F
val bFloat:Float = 2e1f // 或者是 1E2F
val maxFloat:Float= Float.MAX_VALUE // 3.4028235E38
val minFloat:Float= Float.MIN_VALUE // 1.4E-45 ,最小的非零的正数
val minFloat2:Float= -Float.MAX_VALUE // -3.4028235E38 ,Float 真正的最小值

2.3.1 Float 的三个特殊值

val posFloat:Float= Float.POSITIVE_INFINITY // Infinity 正无穷
val negFloat:Float= Float.NEGATIVE_INFINITY // -Infinity 负无穷
val nanFloat:Float= Float.NaN // NaN 不是数

2.3.2 如何得到一个 无穷值 或者 不是数

val posFloat2:Float = 1.0f/0.0f // 结果为 posFloat
val nanFloat2:Float = 0.0f/0.0f // 结果为 NaN

2.3.3 比较 无穷值 或者 不是数

val posBoolean: Boolean = posFloat == posFloat2 // true
val nanBoolean: Boolean = nanFloat == nanFloat2 // false

val posBoolean2: Boolean = posFloat === posFloat2 // true
val nanBoolean2: Boolean = nanFloat === nanFloat2 // false

2.4 Double

val aDouble: Double = 3.0
val maxDouble: Double = Double.MAX_VALUE // 1.7976931348623157E308
val minDouble: Double = Double.MIN_VALUE // 4.9E-324 ,最小的非零的正数
val minDouble2: Double = -Double.MAX_VALUE // -1.7976931348623157E308 ,Double 真正的最小值

2.5 Short

val aShort: Short = 1
val maxShort: Short = Short.MAX_VALUE // 32767 ,即 2^15-1
val minShort: Short = Short.MIN_VALUE // -32768 ,即 -2^15

2.6 Byte

val aByte: Byte = 1
val maxByte: Byte = Byte.MAX_VALUE // 127 ,即 2^7-1
val minByte: Byte = Byte.MIN_VALUE // -128 ,即 -2^7

2.7 总结

  • 浮点型的数据都是无符号的,整型以及 Byte 都是有符号的;

3. Char 类型(对应 Java 中的 Character)

3.1 宽度 16(2字节),表示一个16位的 Unicode 字符

val aChar: Char = '0'
val bChar: Char = 'a'
val cChar: Char = '\n'
val dChar: Char = '中'
val eChar: Char = '\u234f' // ⍏

3.2 Kotlin 中的特殊 Char 类型

转义字符 含义
\t 制表符
\b 光标后退一个字符
\n 回车
\r 光标回到行首
\' 单引号
\" 双引号
\\ 反斜杠
\$ 美元符号

3. 基本类型的转换 不可以隐式转换

  • 在 Java 中,从小到大,数据可以隐式转换,数据类型会自动提升;
  • 在 Kotlin 中比较严格,不存在隐式转换,例如将 Int 转成 Long,必须使用显式转换;
val anInt: Int = 10
val anLong: Long = anInt.toLong()

4. 字符串

1. 创建并初始化一个字符串

val aString: String = "Hello Kotlin"

2. 通过字符数组创建一个字符串

val fromCharArray: String = String(charArrayOf('H', 'e', 'l', 'l', 'o', ' ', 'K', 'o', 't', 'l', 'i', 'n')) // Hello Kotlin

3. 字符串的比较 比较值

val equalsBoolean: Boolean = aString == fromCharArray // true ,在 kotlin 中,== 相当于 Java 中的 equals() 方法

== 相当于 Java 中的 equals() 方法;

4. 字符串的比较 比较引用

val equalsBoolean2: Boolean = aString === fromCharArray // false ,在 kotlin 中,=== 相当于 Java 中的 == ,比较两个对象的引用

=== 相当于 Java 中的 ==

5. 字符串模板

  • 假设我们通过两个变量想计算并输出一个 1 + 2 = 3,在 Java 中的做法是:
val numInt1: Int = 1
val numInt2: Int = 2
val resultString: String = "" + numInt1 + " + " + numInt2 + " = " + (numInt1 + numInt2) // 1 + 2 = 3
  • 而在 kotlin 中使用模板就变得简单多了
val resultString2: String = "$numInt1 + $numInt2 = ${numInt1 + numInt2}" // 1 + 2 = 3

注意:当边量名可以和字符串区别开来的时候,可以将 {} 省略,例如例子中的 $numInt1 + $numInt2 = 中变量 $numInt1$numInt2+= 之间都有空格将变量名和字符进行区分,所以省略了 {}

  • 使用字符串模板需要注意以下情况
val money: Int = 1000
val moneyString: String = "$money" // 1000
val moneyString2: String = "$$money" // $1000
val moneyString3: String = "\$money" // $money

6. 原始字符串

  • 用三个双引号可以表示原始字符串;
  • 反斜杠 \ 也不再表示转义了,所以 \n 也不再表示换行了,直接用回车换行
  • 字符串模板仍然被支持,但是仍然没有办法被转义,所以想要在字符串中输出 $,则 $ 符号后面不能跟变量名
val originalString:String = """用三个双引号可以表示原始字符串;
    反斜杠 \ 也不再表示转义了,所以 \n 也不再表示换行了,直接用回车换行;
    并且字符串模板仍然被支持,$money,由于没有办法被转义,所有只能这样写 $ money;
    """

上面内容的输出结果是

用三个双引号可以表示原始字符串;
        反斜杠 \ 也不再表示转义了,所以 \n 也不再表示换行了,直接用回车换行;
        并且字符串模板仍然被支持,1000,由于没有办法被转义,所有只能这样写 $ money;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容