1.数据类型

蔚落 2022-10-17 04:06 102阅读 0赞

一、boolean类型

  1. val b: Boolean = true
  2. val b1: Boolean = false

二、数字类型

可定义的类型


































类型 字节长度
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

如何定义

  1. fun main() {
  2. /**
  3. * 默认都是 double 类型
  4. */
  5. val d = 2.0
  6. /**
  7. * 默认都是 float 类型,使用f结尾
  8. */
  9. val f = 2.0f
  10. /**
  11. * 16进制表示
  12. */
  13. val hex = 0XFF
  14. /**
  15. * 二级制表示
  16. */
  17. val number = 0b00000001
  18. }

Kotlin 中存在一个特点, Float 和 Double有一个静态变量NaN(不是一个数的数)

  1. fun main() {
  2. /**
  3. * 不会抛异常
  4. */
  5. val naN: Double = 0.0 / 0.0
  6. /**
  7. * 不会抛异常
  8. */
  9. val naN2: Float = 0.0f / 0.0f
  10. /**
  11. * 抛异常
  12. */
  13. val intVar = 0 / 0
  14. println(naN)
  15. println(naN2)
  16. /**
  17. * Double 与 Float类型存在一个 Nan 类型(不是数的数)
  18. */
  19. println(naN == Double.NaN)
  20. println(naN2 == Float.NaN)
  21. }

输出结果:

  1. NaN
  2. NaN
  3. false
  4. false
  5. Exception in thread "main" java.lang.ArithmeticException: / by zero
  6. at com.qihoo.kot.KotlinDemoKt.main(KotlinDemo.kt:13)
  7. at com.qihoo.kot.KotlinDemoKt.main(KotlinDemo.kt)

1、数字类型做比较

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 中的位运算:

  1. fun main() {
  2. val type1 = 0X10000000
  3. val type2 = 0X20000000
  4. val type3 = 0X40000000
  5. val type4 = 0X80000000
  6. var flag = type1 or type2 or type3
  7. if ((flag and type1) != 0) {
  8. println("包含type")
  9. }
  10. if ((flag and type2) != 0) {
  11. println("包含type2")
  12. }
  13. if ((flag and type3) != 0) {
  14. println("包含type3")
  15. }
  16. if ((flag.toLong() and type4) != 0L) {
  17. println("包含type4")
  18. }
  19. // 去除规则 当前flag 包含 type1和type2规则,去除type2的规则
  20. flag = flag and type2.inv()
  21. }

五、区间 Range

Kotlin特殊的类型,和数学上的区间概念属于同一概念

1、定义闭区间

  1. // 0到1024的闭区间[0,1024]
  2. val range = 1..1024

2、半开区间

  1. // 0到1024的闭区间[0,1024)
  2. val openRange = 1 until 1024

六、Char

和 java 的一样,占2个字节(没啥好说的)。

七、字符串

Kotlin 相比较 java 字符串,变动更为的强大。支持了更多的方法和定义类型。

1、直接索引访问字符

  1. val c = str[0]
  2. for (c in str) {
  3. println(c)
  4. }

2、字符串模板

其实很多语言都有这个功能。在 java 的世界中通过+拼接字符串的形式,比较复杂丶难用丶并且易出错。
kotlin 支持字符串模板的功能(其他语言玩烂的功能),只需要通过 符 合 编 写 表 达 式 。 < / b r > 如 : 拼 接 一 个 字 段 的 值 : 符合编写表达式。
如: 拼接一个字段的值: 符合编写表达式。
如:拼接一个字段的值:XXX字段名,拼接运算表达式返回值:${表达式}

3、更夸张的字符串

当我们要输出,一个有格式的模板字符串。使用 \n 简直是噩梦。Kotlin 为我们考虑了这点,只需这样定义:””“XXXX内容”””

  1. fun main() {
  2. val superStr="""aaaa
  3. |dddd
  4. |s
  5. |asfa${
  6. a+b}
  7. """.trimMargin()
  8. println(superStr)
  9. }

八、总结

相比较 java 数据类型区分基本与引用,而kotlin给我的感觉就是已经不存基本数据类型的概念。所有的类型全部封装成了类,并且自动拆装箱。这也是所有类型赋值必须类型相同才可以赋值。而 java 在基本数据类型赋值上,处于睁一只眼,闭一只眼。

发表评论

表情:
评论列表 (有 0 条评论,102人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis常见数据类型(1)

    Redis提供了5种数据结构, 理解每种数据类型的特点对于Redis开发运维非常重要, 同时掌握每种数据类型的常见命令, 会在使用Redis的时候做到游刃有余. 内容如下: