Kotlin基础

212 阅读5分钟

在 Kotlin 中,有以下 8 种基础数据类型:

  • Byte:8 位有符号整数,取值范围为 -2^7 ~ 2^7-1 = -128 ~ 127。
  • Short:16 位有符号整数,取值范围为 -2^15 ~ 2^15-1 = -32,768 ~ 32,767。
  • Int:32 位有符号整数,取值范围为 -2^31 ~ 2^31-1 = -2,147,483,648 ~ 2,147,483,647。
  • Long:64 位有符号整数,取值范围为 -2^63 ~ 2^63-1 = -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807。
  • Float:32 位IEEE 754-1985 浮点数,取值范围为 3.4028235e+38 到 1.4e-45。
  • Double:64 位 IEEE 754-1985 浮点数,取值范围为 1.7976931348623157e+308 到 4.9e-324。
  • Boolean:表示逻辑值,只有两个可能值:true 和 false。
  • Char:16 位有符号 Unicode 字符。

下面我们来更深入地了解这些基础数据类型:

  • 整数类型(Byte、Short、Int、Long):

整数类型之间可以进行隐式转换,但如果数值超出范围,则会发生数据溢出。 可以使用各种进制表示整数,如十进制、十六进制、二进制。 可以使用下划线 _ 来分隔数字,提高可读性,如 1_000_000L。

  • 浮点类型(Float、Double): 浮点类型使用 IEEE 754 标准表示。 浮点数运算存在精度问题,如 0.1 + 0.2 != 0.3。 浮点数之间的比较要小心,可以使用 == 或 != 时设置一个误差范围。

  • Boolean 类型: 只有两个值: true 和 false。 可以使用逻辑运算符 &&、||、! 进行逻辑运算。

  • Char 类型: 表示单个 Unicode 字符。 可以使用 '' 来表示字符字面量,如 'A'。 也可以使用转义字符,如 '\n'、'\t'。 在使用这些基础数据类型时,需要注意以下几点:

根据变量的使用场景,选择合适的数据类型,以节省内存空间。 整数类型和浮点类型之间的转换要格外小心,可能会导致精度损失。 尽量避免使用 Double 类型进行精确计算,改用 BigDecimal 类型。 合理利用数据类型的取值范围,避免出现数据溢出的问题。

总之,Kotlin 的基础数据类型为我们提供了灵活、丰富的选择,但在使用时也需要谨慎考虑各类型的特点和使用场景。

在计算机中,整数可以分为有符号整数和无符号整数两种表示方式。

有符号整数表示既可以表示正数,也可以表示负数的整数。它使用一个比特(bit)来表示整数的正负号。具体来说:

最高位(符号位)用来表示正负号,0 表示正数,1 表示负数。 其他位用来表示数值大小。 例如,使用 8 位(1 字节)表示有符号整数:

取值范围: -128 ~ 127 二进制表示: 正数如 +5 表示为 00000101 负数如 -5 表示为 11111011 无符号整数只能表示非负整数,即 0 及正数。它不使用符号位,所有位都用来表示数值大小。

例如,使用 8 位(1 字节)表示无符号整数:

取值范围: 0 ~ 255 二进制表示: 0 表示为 00000000 5 表示为 00000101

  1. 声明变量
  • var 声明可修改变量
  • val 声明只读变量 image.png
  1. 编译时常量 只读变量并非只读 编译时常量只能在函数之外定义, 因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时赋值, 编译时常量 要在这些变量赋值前就已存在; 编译时常量只能是常见基本数据类型:Byty Char Short Int Float Double Boolean String

  2. 数据类型

类型推断:对于已声明并赋值的变量, 它允许你省略类型定义

image.png

Java有两种数据类型:引用类型宇基本数据类型 Kotlin只提供引用类型, 出于更高性能的需要, Kotlin编译器会在Java字节码中改用基本数据类型

  1. 表达式 if/else if表达式 同Java range表达式
  • in A..B, in关键字用来检查某个值是否在指定范围之内 when表达式
  • 允许你编写条件, 在某个条件满足时, 执行对应的代码
  • 只要代码包含else if分支, 都建议改用when表达式
val school = "0学"
val level:Any = when(school){
    "学前班" -> "幼儿"
    "小学" -> "少儿"
    "中学" -> "青少年"
    "大学" -> "成年"
    else -> {
      println("未知")
    }
}
 println(level)

  1. String 模板 模板支持在字符串的引导内放入变量值 还支持字符串里计算表达式的值并插入结果, 添加在${}中的任何表达式, 都会作为字符串的一部分求值
val name = "名称"
val age = "年龄"
println("$name 和 $age")
val flag = false
println("${if(flag) name else age}")

函数

/*
 * private: 访问修饰符 
 * fun: 函数声明关键字
 * doSomething: 函数名
 * age: 函数参数
 * String: 返回类型
 */
private fun doSomething(age:Int, flag:Boolean):String

图解 image.png

默认参数 如果不打算传入参值, 可以预先给参数指定默认值

具名函数参数 如果使用命名值参, 就可以不用管值参的顺序

fun fix(name:String, age:Int = 2) {
    priintln(name+age)
}
fun main(){
    fix(age=4,name = "Jack")
}

Unit函数

不是所有函数都有返回值, Kotlin中没有返回值的函数叫做Unit函数, 也就是说他们的返回类型是Unit. 在Kotlin之前, 函数无返回值时用void描述,

  1. 查看Kotlin字节码 Shift键两次, 输入Show kotlin Tools->Kotlin->Show Kotlin ByteCode