基本常量
- 十进制:123
- 长整型以大写的 L 结尾:123L
- 16 进制以 0x 开头:0x0F
- 2 进制以 0b 开头:0b00001011
- 注意:8进制不支持
- 可以使用下划线使数字常量更易读如:1000_0000_0000
比较两个数字
- 三个等号 === 表示比较对象地址
- 两个 == 表示比较两个值大小
val a: Int = 10000
println(a === a) // true,值相等,对象地址相等
//经过了装箱,创建了两个不同的对象
//注意必须加入? 相当于装箱,否则===的结果仍然是true 而不会是false
val boxedA: Int? = a
val anotherBoxedA: Int? = a
//虽然经过了装箱,但是值是相等的,都是10000
println(boxedA === anotherBoxedA) // false,值相等,对象地址不一样
println(boxedA == anotherBoxedA) // true,值相等
类型转换
由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。
var a: Byte = 1 // OK, 字面值是静态检测的
var b: Int = b // 错误
//代用其toInt()方法
var c:Int=b.toInt()
位操作符
对于Int和Long类型,还有一系列的位操作符可以使用,分别是:
- shl(bits) – 左移位 (Java’s <<)
- shr(bits) – 右移位 (Java’s >>)
- ushr(bits) – 无符号右移位 (Java’s >>>)
- and(bits) – 与
- or(bits) – 或
- xor(bits) – 异或
- inv() – 反向
字符
- Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号 ' 包含起来的。比如普通字符 '0','a'。
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // 显式转换为数字
}
布尔
- 布尔值与java中布尔值类似,唯一的不同是若需要空引用布尔值会被装箱(也就是上篇文章基本语法中的 ? 所进行的操作)
数组
- 数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以用Array.[index] 获取数组某个位置(index)的值
- 数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数
//[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
- 除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高
字符串
- 和 Java 一样,String 是可不变的。方括号 [] 语法可以很方便的获取字符串中的某个字符,也可以通过 for 循环来遍历:
var str="abcd"
for (c in str) {
println(c)
}
- Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串,比如:
val text = """
多行字符串
多行字符串
"""
println(text) // 输出有一些前置空格
- String 可以通过 trimMargin() 方法来删除多余的空白。
val text = """
-多行字符串
-删除特定的"-"
-多行字符串
-Runoob
""".trimMargin("-")
println(text) // 前置空格删除了
字符串模板
- 字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:
val i = 10
val s = "i = $i" // 求值结果为 "i = 10"
println(s)
val s = "runoob"
val str = "$s.length is ${s.length}" // 求值结果为 "runoob.length is 6"
println(str)
val price = """
${'$'}9.99
"""
println(price) // 求值结果为 $9.99