基本数据类型
根类型Any
Kotlin中所有的类有一个共同的超类Any,如果类声明时候没有指定超类,则默认为Any
Any 只有equals() hashCode() 和toString 三个函数
1 | public open class Any{ |
基础类型
在Kotlin中一切皆是对象,所有类型都是引用类型,没有类似java中的基本类型。
数字类型
类型 | 宽度(Bit) |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
上述各个数字类型均继承了Nummber类和Compare类
字面常量值
- 十进制: 123
- Long类型用大写的L标记 123L
- 十六进制 0x78
- 二进制 0b1111011
- Float类型用F或者f标记 12.3f
没有八进制哦!
另外Kotlin从1.1起允许使用数字字面值的下划线,提高可读性
100_000 等价于100000
123_456_789L 等价于123456789L
0xFF_D7_D7_D7 等价于 0xFFD7D7D7
0b1111_1111_1111 等价于0b111111111111
类型转换
值范围较小类型 不能进行隐式转换成值范围较大的类型,但是可以通过显式转换来转换类型
1 | var i: Int = 1 |
位运算
在Kotlin并不是使用特殊字符来进行位运算,而是使用中缀方式调用这些位运算的函数
1 | val x = (1 shl 2) and 0x000FF00 |
- shl(bits) 有符号的左移 <<
- shr(bits) 有符号的右移 >>
- ushl(bits) 无符号的左移 <<
- ushr(bits) 无符号的左移 <<
- and(bits) 位与 &
- or(bits) 位或 |
- xor(bits) 位异或 ^
- inv(bits) 位非 ~
String 字符串类型
Kotlin中,字符串用String 表示,String类不可以被继承
索引运算符
字符串中的元素 可以使用索引运算符进行访问
1 | var str:String = "abc" |
索引运算符要考虑越界问题
原生字符串
原生字符串使用三个引号
1 | var str = """我是原生字符串, |
字符串模板
在字符串中可以包含模板表达式,模板表达式由$开头
1 | val h = 123 |
数组类型
数组在Kotlin中使用Array类来表示
1 | class Array<T> private constructor() { |
Kotlin 允许将不同类型的元素放到一个数组当中
1 | fun main(args:Array<String>){ |
1 | 1 class kotlin.Int |
这个时候Kotlin会把这个数组类型设置成java.lang.Object
但是当你使用具体的元素时候,这些元素又会对应自己各自的类型
原生数组类型
Kotlin中也有无装箱的开销的专门类来表示原生数组类型.
BooleanArray
ByteArray
CharArray
ShortArray
IntArray
LongArray
FloatArray
DoubleArray
BooleanArray
可空类型
Kotlin 中的null
1 | null == null |
null对应的类型是Nothing?
null 可以进行加法运算
1 | println(null + 7) |
1 | null7 |
###安全调用?.
在Java中,为了防止传来的值是空值,经常会加上一个空判断处理
1 | public static int getLength2(String str) throws Exception{ |
在Kotlin中,普通类型形如Int,String等类型是不允许指向null的,只有可空类型才可以指向null
可空类型就是在普通类型的后面接上一个?,如String?,Int?
可空类型的调用必须通过安全调用(?.)或者非空断言(!!.)进行调用
1 | fun getLength(str:String?):Int?=str?.length |
Nothing类型
Kotlin中没有类似Java 或者C语言中的函数没有返回值的标记void,但是拥有一个对应的Nothing类型。在Java中
返回void的方法,其返回值void是无法被访问到的,而java中的Void类型是可以获取到值,也可以当作值被打印输出,但是Void类型的返回值,返回值永远是null
在Kotlin中对应的就是Nothing?,它唯一的可被访问到的返回值也是null
类型转换与类型检测
is,!is运算符
is运算符可以检查对象是否与特定的类型相兼容,is运算符用来检查对象是否属于某个数据类型
1 | "a" is String //true |
大都数情况下,我们不需要在Kotlin中使用显示转换符,因为编译器会跟踪不可变值的is 检查,并在需要时候自动插入安全的转换
1 | fun main(args:Array<String>){ |
输出结果:
1 | 1 |
as 运算符
as运算符用于执行引用类型的显示类型转换,如果要转换的类型于指定的类型兼容,就会成功转换;如果不兼容,使用as?运算符就会返回null