在 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
- 声明变量
- var 声明可修改变量
- val 声明只读变量
-
编译时常量 只读变量并非只读 编译时常量只能在函数之外定义, 因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时赋值, 编译时常量 要在这些变量赋值前就已存在; 编译时常量只能是常见基本数据类型:Byty Char Short Int Float Double Boolean String
-
数据类型
类型推断:对于已声明并赋值的变量, 它允许你省略类型定义
Java有两种数据类型:引用类型宇基本数据类型 Kotlin只提供引用类型, 出于更高性能的需要, Kotlin编译器会在Java字节码中改用基本数据类型
- 表达式 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)
- 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
图解
默认参数 如果不打算传入参值, 可以预先给参数指定默认值
具名函数参数 如果使用命名值参, 就可以不用管值参的顺序
fun fix(name:String, age:Int = 2) {
priintln(name+age)
}
fun main(){
fix(age=4,name = "Jack")
}
Unit函数
不是所有函数都有返回值, Kotlin中没有返回值的函数叫做Unit函数, 也就是说他们的返回类型是Unit. 在Kotlin之前, 函数无返回值时用void描述,
- 查看Kotlin字节码 Shift键两次, 输入Show kotlin Tools->Kotlin->Show Kotlin ByteCode