kotlin 之基础类型、基本概念
文章目录
前言
正文
基础概念
1. 包定义和导入
//[1] 包的声明应处于源文件顶部
package my.demo
import kotlin.text.*
2. 变量
- 只读变量 val
// val 不可变,需立即赋值
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
c = 3 // 明确赋值
- 读写变量 var
var x= 5
x = 6
- 顶层变量。包名下可直接使用
val PI = 3.14
fun sqrt(radio:Int):Int{
return radio * PI
}
3. kotlin 常量 ,const 关键字
//使用
constt val CONST_NUM = 1
//[1] kotlin 的常量指的是编译期常量(compile-time constant),编译时会将变量直接替换值
4. 延迟初始化 lateinit
lateinit var : 表示我会初始化的,编译器你就不用检查报错了
5. 注释
与 Java 引用
//[1] 单行注释
// 这是注释
// 多行注释
/*
*
*/
6. 入口 main 函数
// readLine 方法读取用户输入
fun main(args: Array<String>) {
println("n:${readInt()}")
}
// 扩展函数
private fun readInt() = readLine()!!.toInt()
7. 命令行编译 kotlin 文件
//可以看到,会把 kotlin 代码转换成 jar 包
- kotlinc hello.kt -include-runtime -d hello.jar
- java -jar hello.jar
基础类型
1. 类型推断
//[1] int 和 long
val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1
//[2] 浮点和双精度
val pi = 3.14 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float,实际值为 2.7182817
2. 数字字面值下划线
//更易读
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
3. 运算
//[1] 位运算
val x = (1 shl 2) and 0x000FF000
完整位运算列表(只用于 Int 与 Long)
- shl(bits) : 有符号左移
- shr(bits) : 有符号右移
- ushr(bits): 无符号右移
- and(bits): 位 与操作
- or(bits): 位或操作
- xor(bits):位异或操作
- inv() : 位非
4. bool 布尔
需要可空引用时,布尔会被装箱
5. 数组
//[1] 初始化一个数组
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
//[2] 其他操作
//[42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }
// [0, 1, 2, 3, 4]
var arr = IntArray(5, { it * 1 })
6. 无符号整型
Kotlin 为无符号整数引入了以下类型:
- kotlin.UByte: 无符号 8 比特整数,范围是 0 到 255
- kotlin.UShort: 无符号 16 比特整数,范围是 0 到 65535
- kotlin.UInt: 无符号 32 比特整数,范围是 0 到 2^32 - 1
- kotlin.ULong: 无符号 64 比特整数,范围是 0 到 2^64 - 1
区别有符号整数:
- Kotlin.Byte: 8位, -128 ~ 127
- Kotlin.Int: 16位, -2^31 ~ 2^31 -1
7. 字符串
//普通字符串
val s = "Hello, world!\n"
//原始字符串,可以包含换行和所有字符
val text = """
for (c in "foo")
print(c)
"""
//[1] 使用 trimMargin() 函数去除前导空格,默认| 用作前缀
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()
//[2] 字符串模板, $i 表示 i
val i = 10
println("i = $i") // 输出“i = 10”
8. Android 资源文件字符串里的 $ 使用
//字符串
<string name="hi">Hi %s</string>
//获取字符串
getString(R.id.hi, "world");
9. ?. 和 ?: 操作符
val files = File("Test").listFiles()
//[1] files 不为null, 打印size; 否则 打印null
println(files?.size)
//[2] files 不为null, 打印size; 否则 打印 "empty"
println(files?.size ?: "empty")