基本数据类型
根类型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