基本类型
1、numbers
kotlin提供了以下几种类型,和java保持一致
Type | Bit width |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
需要注意的是characters不属于number类型
long类型的数值以L结尾:123L
float类型的数值以F结尾:123.12F
默认的是整数值为Int类型
默认的小数类型为Double类型
十六进制的数值以0x开头:0x0f
二进制的数值以0b开头:0b00010101
kotlin没有8进制的表示方法
为了将数值表示的更清楚,可以用_将数字隔开如:
val oneMillion = 1_000_000
val hexBytes = 0xFF_EC_DE_5E
2、数值的表现形式
数值变量可以分为两种:一种是不为null,一种是可为null的。
val a: Int = 1000
val boxedA: Int? = a
val boxedB: Int? = a
println (a === boxedA)
println (a === boxedB)
println (boxedA === boxedB)
println (a == boxedA)
println (a == boxedB)
println (boxedA == boxedB)
打印结果为=======
false
false
false
true
true
true
注:
===比较的是两边的对象引用是否属于同一个
== 比较的是两个对象的equals
如果number类型间互相转换时,要使用提供的方法to…(),例如将一个Int型的转换成Long型的则为:
val a: Int = 1000
val b: Long = a.toLong()
3、characters
Char类型用’ ‘表示。而且char类型的不能直接转换成Numbers。
4、Boolean
跟java一样有true 和 false两个值。相应的运算符有|| && !
5、Arrays
和java的用法基本一样,初始化代码如下:
val arr = arrayOf("a", "b", "c")
arr[0] = "d"
println(arr[0])
println(arr[1])
6、Stirng
string有两种方式:
(1)用双引号”“,跟java一样,val str = “hello word”
(2)用三个引号,如果一段文字是多行的可以用这种方法:
val text = """
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)
"""
string还可以包含模板表达式(groovy的插值),用关键字$表示,如:
val s = "abc"
val str = "$s.length is ${s.length}"
println(str)
=====打印结果为
abc.length is 3
7、packages and import
基本和java一样,有一点不一样的就是,如果Import两个名字一样的类,则可以用重新命名别名的方式解决冲突
import foo.Bar
import bar.Bar as bBar //bBar 代表着 bar.Bar
8、return and jumps
kotlin跳出一个表达式有三种方式:
(1)return: 会跳出本方法体或所在的匿名方法体
(2)break: 跳出本次loop循环
(3)continue: 暂不执行本次循环,继续执行下次循环
- break and continue labels
一个kotlin的表达式可以标记一个标签,此标签后跟着一个@符号,例如:
loop@ for(i in 1..100){
println(i)
}
我们在使用break和continue时就可以使用这个标签了,例如:
loop@ for(i in 1..100){
for(j in 1..100){
if(j == 50) break @loop //如果满足j == 50的条件,则会跳出有loop标签的最外层的for循环
}
}
- return at labels
return 会跳出所在的方法体或者所在的匿名方法体,如下:
fun foo(){
val ints = listOf(1, 3, 5, 7)
ints.forEach {
if (it == 3) return
println(it)
}
println("fun foo")
}
//此方法中,it == 3成立时,会跳出foo方法, "fun foo"不会打印
如果我们想要只是跳出当前的lambda表达式,可以给此lambda表达式添加一个标签,然后return@label,如下
fun foo(){
val ints = listOf(1, 3, 5, 7)
ints.forEach lit@ {
if (it == 3) return@lit //跳出for循环,会继续执行打印"fun foo"
println(it)
}
println("fun foo")
}
另外一种处理方法是,用匿名方法替换lambda表达式,如
fun foo(){
val ints = listOf(1, 3, 5, 7)
ints.forEach (fun (it: Int){
if (it == 3) return //跳出for循环,会继续执行打印"fun foo"
println(it)
})
println("fun foo")
}