Kotlin的新特性(一):基本类型
Kotlin是一门新兴的语言,它可以运行于JVM、JavaScript以及native环境(native正在开发中)。它是由著名软件开发商Jetbrains开发,具备了很多新的特性,能够在开发中提升效率。目前已经成为Android官方支持的开发语言。
Kotlin语言中的一切类型都是对象,这与Java不同。虽然Java标榜自己是一门纯粹的面向对象的语言,但由于设计的局限,还是保留了一些非面向对象的元素,最明显的就是在Java中,int、float、double、long、char等基本类型不是类,而是原生类型(primitive types)。为了补救这个缺陷,Java开发了对应的包装类型Integer、Float、Double、Long、Chararater等。
Kotlin吸收了C#等语言的设计思想,将上述基本类型内置为类,它们具有自己的成员函数和成员属性。这些基本类型包括:数字类型(numbers),字符类型(characters),布尔类型(booleans)和数组类型(arrays)。
Number
Kotlin中的数字类型与Java类似,包括Double、Float、Long、Int、Short、Byte等类型。如上文所述,它们都是类。
字面常量
Kotlin中的字面常量(literal constants)与Java类似,Int类型支持十进制,直接用普通十进制表示即可;Long类型则需跟上L后缀,如123L表示一个Long型常数,值是123。十六进制加0x前缀,如0x0F表示十六进制数,值是15。二进制加0b前缀,如0b00001011表示二进制数,值是11。Kotlin中不支持八进制数。
Kotlin支持通用的浮点数表示法,默认是Double类型,如123.5,123.5e10,如果是Float类型,需要加f或F后缀,如123.5f。
下划线分隔位数
Kotlin支持在数字常量中使用下划线分隔数位。这能使位数较多的数字具有更强的可读性。
|
|
当Kotlin运行于JVM中时,number类型实际上是存储为JVM原生类型,当被赋值给可以为空(nullable)的引用时,Kotlin的number类型是对原生类型的包装。
Kotlin中,当使用一个number型常量(val)去初始化一个不可为空的number型常量时,被初始化的常量都指向内存中同一个地址。而当初始化为一个可以为空的常量时,则会在内存中不同地址创建两个常量,并将值赋给它们。
|
|
但即使是赋值给可以为空的常量,依然能保证它们的相等性(equality):
|
|
宽向扩展
Kotlin中不存在隐式的宽向类型扩展,即Byte不能直接转换为Int,Int不能直接转换为Double,等等。
|
|
每种number类型都能通过内置方法任意转换为另一种number类型。
Characters
字符类型用Char类表示。与Java不同,它不能被直接当做数字类型使用。
|
|
与Java一样,字符字面量使用单引号表示。转义字符使用反斜杠。特殊字符使用反斜杠加u加十六进制数表示。字符可以通过toInt()方法显式转换为Int。
与number一样,字符被赋值给一个nullable引用时,唯一性(identity,内存中地址相同)是不被保证的。
Booleans
用Boolean代表布尔类型,它有两个值:true和false。
布尔类型被赋值给nullable引用时,会被包装。但能保证唯一性。
|
|
Arrays
在Java中,数组其实也是一种对象,只是我们不能显示地获得它的类型表示。在Kotlin中,用Array类来代表数组。它具有get和set方法(通过[]操作符重载了这两个函数),size属性以及其他有用的函数,如迭代器方法iterator()。
创建数组可以使用arrayOf()方法,并传递数组元素给它作为参数。例如arrayOf(1, 2, 3)就创建了一个数组[1, 2, 3]。arrayOfNulls()函数用于创建一个给定长度的数组,并用null元素填充它。
Kotlin也有特定的类代表原生类型的数组,如ByteArray、ShortArray、IntArray等。这些类与Array没有继承关系,但有对应的方法和属性集合。如IntArray有对应的工厂函数。
|
|
Strings
字符串用String类表示。与Java一样,String是不可变类。String的元素是字符,与Java中必须使用charAtIndex()这样一个方法去访问元素不同,Kotlin中可以使用下标运算符[]去访问字符元素。String还能使用for循环很方便地访问。
|
|
字符串字面量
Kotlin有两种字符串字面量:一种是可转义的字符串,它可能含有转义字符,它不能表示在多行,除非使用“+”将不同的字符串连接成一个字符串;另一种是原始(raw)字符串,能在多行表示并能包含任意文本。
转义字符串:
|
|
原始字符串:
|
|
可以使用trimMargin()移除字符串开头和中间的空格,但空格的末尾必须跟上一个明确的分隔符,默认是“|”。
|
|
也可以显示指定分隔符,如trimMargin(“>”)
字符串模板
在Java中,如果我们在字符串中要加入变量,必须使用加号连接,或者使用格式化字符串。而在Kotlin中,可以使用字符串模板,这将使字符串变得更加简洁,看上去也更加舒服。字符串模板以美元符号开头,直接跟上一个变量名。
|
|
或者是一个用大括号包裹的任意的表达式。
|
|
模板在原始字符串和转义字符串中都支持。如果你在原始字符串中需要表示美元符号的字面值,可以像下面这样使用。
|
|