Kotlin学习笔记(二)基本类型
如果你学过Ruby,你一定知道“万物皆对象”。Kotlin中也一样。即便数字(Numbers)在Kotlin中是基本类型,也可以这样写:123.toString()
下面我们来看一下Kotlin中的基本类型。
Numbers
Kotlin提供的数字类型和Java很像:
| Type | Bitwidth |
|---|---|
| Double | 64 |
| Float | 32 |
| Long | 64 |
| Int | 32 |
| Short | 16 |
| Byte | 8 |
值得注意的是,定义Long形要用大写L:123L
而16进制和二进制则和Java一样:0x0F 0b0101
8进制则不支持。
浮点型和Java一样,类似123.45默认为Double类型,想要Float类型则应写成123.45f
在Java平台中,Number是基本类型。如果需要一个可空的数字(比如Int?)或者泛型,数字就会被装箱(boxed):
1 | val a: Int = 10000 |
==相当于调用equals方法。而===相当于Java中的==,用来比较引用对象。
注意在官方的Reference中用的是即将被deprecated的identityEquals,会得到错误的结果,详情参看 http://stackoverflow.com/questions/31666155/kotlins-identityequals-not-working-as-expected
Kotlin中,数字类型不能像Java一样隐式(implicitly)转换类型。
1 | val a:Int? = 1 |
而所有的数字类型都有如下显示方法:
- toByte()
- toShort()
- toInt()
- toLong()
- toFloat()
- toDouble()
- toChar()
写惯Java的人可能觉得这样会很不方便,但事情也没有那么糟糕。因为运算符可以帮我们隐式的转换数字类型:
1 | val l = 1.toLong() + 3 // Long + Int => Long |
仅Int和Long可以进行位运算。运算符与Java不同:
- shl(bits) 有符号的左位移,在Java中是
<< - shr(bits) 有符号的右位移,在Java中是
>> - ushr(bits) 无符号的右位移,在Java中是
>>> - and(bits) 与,在Java中是
& - or(bits) 或,在Java中是
| - xor(bits) 异或,在Java中是
^ - inv() 非,在Java中是
~
Characters
Int不能直接转为Char,下面的代码会编译报错:
val a:Char = 1
但是Char可以通过toInt()方法转为Int。
同数字一样,如果需要一个可空类型(Char?),那么这个Char会被自动装箱(boxed)。
Booleans
没什么好说的,也是自动装箱的问题。
Arrays
Kotlin中的数组写法与Java区别很大,有专门的Array类来创建和操作数组。
如果我想创建一个[1, 2, 3]数组,可以这样写:
1 | val a:Array<Int> = arrayOf(1, 2, 3) // 注意这里的数字装箱了 |
还可以像这样写:
1 | // Creates an Array<String> with values ["0", "1", "4", "9", "16"] |
如果想要一个空数组,可以使用arrayOfNulls(size: Int)方法。
如果不想装箱,Kotlin也提供一些原子类型(primitive type)的数组,如IntArray,ShortArray等。这些类型没有继承Array类型,但是拥有相同的方法。每个类型都有对应的工厂方法:
1 | val x: IntArray = intArrayOf(1, 2, 3) |
Strings
s.[0]相当于Java中的s.charAt(0)
还可以使用iterator:
1 | for (c in str) { |
Kotlin包含两种类型的字符串:与Java字符串相同的escaped strings和新的raw strings。escaped strings中的换行符是\n,而raw strings就厉害了。看这个例子:
1 | val text = """ |
注意第二行和第三行都是字符串,它们被包含在三个引号中。
Kotlin中再也不用写繁琐的String.format了,只需要一个$:
1 | val i = 10 |
甚至可以像这样写表达式:
1 | val s = "abc" |
这篇是用Typora写的,确实很好用,而且是国人出品!