目录:
Kotlin的基本数值类型:
类型 | 占位 | 取值范围 |
---|---|---|
Byte | 8 | -128~127 |
Short | 16 | -32768~32767 |
Int | 32 | -2147483648~2147483647 |
Long | 64 | -9223372036854775808~9223372036854775807 |
Float | 32 | 1.4E-45~3.4028235E38 |
Double | 64 | 4.9E-324~1.7976931348623157E308 |
注:不同于Java的是,字符不属于数值类型,是一个独立的数据类型。
可用以下方式获得取值范围:
fun main(args: Array<String>) {
println(Byte.MIN_VALUE)
println(Byte.MAX_VALUE)
println(Short.MIN_VALUE)
println(Short.MAX_VALUE)
println(Int.MIN_VALUE)
println(Int.MAX_VALUE)
println(Long.MIN_VALUE)
println(Long.MAX_VALUE)
println(Float.MIN_VALUE)
println(Float.MAX_VALUE)
println(Double.MIN_VALUE)
println(Double.MAX_VALUE)
}
fun a(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt()-'0'.toInt() // 显式转换为数字
}
fun b(c: Char) {
// if (c == 1) { // 错误:类型不兼容
// }
if (c == '1') { //ok
println(c)
}
}
fun main(args: Array<String>) {
println(a('1'))
b('1')
}
所有类型的字面常量:
注:不支持8进制
三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小 。
fun main(args: Array<String>) {
val a: Int = 128
val b: Int? = a
val c: Int? = a
println(a === a) // true,值相等,对象地址相等
println(b === c) // false,值相等,但对象地址不一样
println(b == c) // true,值相等
}
注:在范围是 [-128, 127] 之间并不会创建新的对象,比较输出的都是 true,从 128 开始,比较的结果才为 false。
to+类型()
方法,如toInt()。Long + Int => Long
。fun main(args: Array<String>) {
val a: Byte = 1
//val b: Int = a
//println(b) //出错
val c: Int = a.toInt()
println(c) //结果为1,Int类型
val d=1L+2 //Long+Int => Long
println(d) //结果为3,Long类型
}
对于Int和Long类型,还有一系列的位操作符可以使用,分别是:
shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 无符号右移位 (Java’s >>>)
and(bits) – 与
or(bits) – 或
xor(bits) – 异或
inv() – 反向
用 Boolean 类型表示,它有两个值:true 和 false。
若需要可空引用布尔会被装箱。
布尔运算有:
|| – 短路逻辑或
&& – 短路逻辑与
! - 逻辑非
fun main(args: Array<String>) {
val a = arrayOf(1,2,3) //[1,2,3]
val b = Array(4,{i->i}) //[0,1,2,3]
val c: IntArray = intArrayOf(1, 2, 3) //[1,2,3]
println(a[0]) //值为1
println(b[3]) //值为3
println(c[2]) //值为3
}
注:与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。
fun main(args: Array<String>) {
val text = """
多行字符串
多行字符串
"""
println(text) // 输出有一些前置空格
val a="abcd"
for (i in a) {
println(i) //循环输出abcd
}
val text1 = """
|多行字符串
|多行字符串
"""
println(text1.trimMargin()) // 前置空格删除了
}
fun main(args: Array<String>) {
val a=1
val b="a = $a"
val c="a = ${a}"
val d="${'$'}10"
println(b) //a=1
println(c) //a=1
println(d) //$10
}