1-基本的数值类型
Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型
2-字面常量
val oneMillion = 1_000_000 //使用下划线使数字常量更易读
3-比较两个数字
三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小,Kotlin 中没有基础数据类型,只有封装的数字类型,这样可以保证不会出现空指针
fun main(args: Array<String>) {
val a: Int = 10000
println(a === a) // true,值相等,对象地址相等
//经过了装箱,创建了两个不同的对象
val boxedA: Int? = a
val anotherBoxedA: Int? = a
//虽然经过了装箱,但是值是相等的,都是10000
println(boxedA === anotherBoxedA) // false,值相等,对象地址不一样
println(boxedA == anotherBoxedA) // true,值相等
}
4-类型转换
较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型
val b:Byte = 1
//val i:Int = b 错误
val i:Int = b.toInt() //正确
val c = 1L + 3 //自动推导
其他的方法:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
5-位操作符
val d = 0b111
println(d.shl(1)) // 0b1110 左移一位 14,类似java <<
println(d.shr(1)) //0b011 右移一位 3,类似java >>
println(d.ushr(1)) //0b011 无符号右移 3
println(d.and(0b101)) // 0b111与0b101为0b101
println(d.or(0b100)) // 0b111或ob100为0b111
println(d.xor(0b100)) // 0b111异或0b100为0b011
println(d.inv()) // 反向 -7
6-字符
fun charToDigitValue(c: Char): Int {
if (c !in '0'..'9')
//if( c == 1){} 和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // 显式转换为数字,要减去后边的,不然输出的就是ASKII
}
7-布尔
布尔用 Boolean 类型表示,它有两个值:true 和 false
内置的布尔运算有:
|| – 短路逻辑或
&& – 短路逻辑与
! - 逻辑非
8-数组
数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数
其他的数组创建函数还有:intArrayOf,byteArrayOf,shortArrayOf
fun main(args: Array<String>) {
//[1,2,3]
val a = arrayOf(1, 2, 3)
//[0,2,4]
val b = Array(3, { i -> (i * 2) })
//读取数组内容
println(a[0]) // 输出结果:1
println(b[1]) // 输出结果:2
val x:IntArray = intArrayOf(1,2,3)
println(x[0]) //输出 :1
}
9-字符串
字符串可以单行,也可以多行
fun main(args: Array<String>) {
val text = """
多行字符串
多行字符串
"""
println(text) // 输出有一些前置空格
val text2 = """
|多行字符串
|菜鸟教程
|多行字符串
|Runoob
""".trimMargin() //默认 | 用作边界前缀,也可以传入参数trimMargin(">)
println(text2) // 前置空格删除了
val s = "TestStr"
val str = "$s.length is ${s.length}" // 求值结果为 "TestStr.length is 7"
println(str)
}