val b: Boolean = true val b1: Boolean = false 复制代码
类型 | 字节长度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
fun main() { /** * 默认都是 double 类型 */ val d = 2.0 /** * 默认都是 float 类型,使用f结尾 */ val f = 2.0f /** * 16进制表示 */ val hex = 0XFF /** * 二级制表示 */ val number = 0b00000001 } 复制代码
Kotlin 中存在一个特点, Float 和 Double有一个静态变量NaN(不是一个数的数)
fun main() { /** * 不会抛异常 */ val naN: Double = 0.0 / 0.0 /** * 不会抛异常 */ val naN2: Float = 0.0f / 0.0f /** * 抛异常 */ val intVar = 0 / 0 println(naN) println(naN2) /** * Double 与 Float类型存在一个 Nan 类型(不是数的数) */ println(naN == Double.NaN) println(naN2 == Float.NaN) } 复制代码
输出结果:
NaN NaN false false Exception in thread "main" java.lang.ArithmeticException: / by zero at com.qihoo.kot.KotlinDemoKt.main(KotlinDemo.kt:13) at com.qihoo.kot.KotlinDemoKt.main(KotlinDemo.kt) 复制代码
kotlin中 ==
相当于调用 equals 方法。在做大小比较时候和 java 不同 kotlin 具有严格的校验。不同的数据类型是无法作比较的。(在编译时期就会报错,包括赋值)
转换 |
---|
toByte() |
toShort() |
toInt() |
toLong() |
toFloat() |
toDouble() |
toChar() |
Kotlin 不在像 java 使用 <<
>>
|
&
操作符来进行位运算,而是提供了对应的函数.
运算符 | 对比java |
---|---|
shl |
有符号左移( java 的 <<
) |
shr |
有符号右移( java 的 >>
) |
ushr |
有符号右移( java 的 >>>
) |
and |
位与( java 的 &
) |
or |
位或( java 的 |
) |
xor |
位异或( java 的 ^
) |
inv |
位非( java 的 ~
) |
让我们来巧妙的复习下 kotlin 中的位运算:
fun main() { val type1 = 0X10000000 val type2 = 0X20000000 val type3 = 0X40000000 val type4 = 0X80000000 var flag = type1 or type2 or type3 if ((flag and type1) != 0) { println("包含type") } if ((flag and type2) != 0) { println("包含type2") } if ((flag and type3) != 0) { println("包含type3") } if ((flag.toLong() and type4) != 0L) { println("包含type4") } // 去除规则 当前flag 包含 type1和type2规则,去除type2的规则 flag = flag and type2.inv() } 复制代码
Kotlin特殊的类型,和数学上的区间概念属于同一概念
// 0到1024的闭区间[0,1024] val range = 1..1024 复制代码
// 0到1024的闭区间[0,1024) val openRange = 1 until 1024 复制代码
和 java 的一样,占2个字节(没啥好说的)。
Kotlin 相比较 java 字符串,变动更为的强大。支持了更多的方法和定义类型。
val c = str[0] for (c in str) { println(c) } 复制代码
其实很多语言都有这个功能。在 java 的世界中通过 +
拼接字符串的形式,比较复杂丶难用丶并且易出错。
kotlin 支持字符串模板的功能(其他语言玩烂的功能),只需要通过 $
符合编写表达式。
如:
拼接一个字段的值: $XXX字段名
,拼接运算表达式返回值: ${表达式}
当我们要输出,一个有格式的模板字符串。使用 /n
简直是噩梦。Kotlin 为我们考虑了这点,只需这样定义: """XXXX内容"""
fun main() { val superStr="""aaaa |dddd |s |asfa${a+b} """.trimMargin() println(superStr) } 复制代码
相比较 java 数据类型区分基本与引用,而kotlin给我的感觉就是已经不存基本数据类型的概念。所有的类型全部封装成了类,并且自动拆装箱。这也是所有类型赋值必须类型相同才可以赋值。而 java 在基本数据类型赋值上,处于睁一只眼,闭一只眼。