前言
在学习一门编程语言,那必然是学习语法 ,在语法的学习之中数据类型又有着举足轻重的地位,今天我们就聊聊kotlin的基本数据类型
基本数据类型
Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同。
这是kotlin官网的一张关于基本数据类型的截图,kotlin的一大特点便是数据的类型推倒,所有以未超出 Int 最大值的整型值初始化的变量都会推断为 Int 类型。如果初始值超过了其最大值,那么推断为 Long 类型。 如需显式指定 Long 型值,请在该值后追加 L 后缀。
fun main() {
val value = 1 //自动推断为Int类型
val longValue = 1L //推断为Long类型
}
对于浮点数,Kotlin 提供了 Float 与 Double 类型。 根据 IEEE 754 标准, 两种浮点类型的十进制位数(即可以存储多少位十进制数)不同。 Float 反映了 IEEE 754 单精度,而 Double 提供了双精度。
val doubleValue = 2.3 //自动推断为Double类型
val floatValue = 2.4f //通过显示的添加一个f声明float类型数据
请注意,与一些其他语言不同,Kotlin 中的数字没有隐式拓宽转换。 例如,具有 Double 参数的函数只能对 Double 值调用,而不能对 Float、 Int 或者其他数字值调用。
字面量
我的理解就是看到这样写出来的变量就知道他是啥(是什么类型的变量),在kotlin中对于整型的字面量包含2进制, 10 进制和16进制 (不支持8进制)
val value = 1 //自动推断为Int类型 十进制的整型
val value2 = 0x0F //自动推断为Int类型 十六进制的整型
val value3 = 0b00001011//自动推断为Int类型 二进制的整型
对于Float和Double类型 默认的字面量是小数,float类型的字面量是后面加了f的小数
val doubleValue = 2.3 //自动推断为Double类型
val floatValue = 2.4f //通过显示的添加一个f声明float类型数据
显示转换
kotlin中的显示转化就是可以将一个大的类型通过 toXXX()转化为对应的类型
每个数字类型支持如下的转换:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
运算
Kotlin支持数字运算的标准集,运算被定义为相应的类成员(但编译器会将函数调用优化为相应的指令)
浮点数的比较
相等性检测:a == b 与 a != b
比较操作符:a < b、 a > b、 a <= b、 a >= b
区间实例以及区间检测:a..b、 x in a..b、 x !in a..b
字符
字符用 Char 类型表示。它们不能直接当作数字,但是我们可以显式把字符转换为 Int 数字:
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // 显式转换为数字
}
Boolean
布尔用 Boolean 类型表示,它有两个值:true 与 false。若需要可空引用布尔会被装箱。
Boolean数据类型的运算
|| – 短路逻辑或
&& – 短路逻辑与
! - 逻辑非
字符串
字符串用 String 类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i]
for (c in str) {
println(c)
}
可以用 + 操作符连接字符串。这也适用于连接字符串与其他类型的值, 只要表达式中的第一个元素是字符串:
val s = "abc" + 1
println(s + "def")
字符串的字面值:Kotlin 有两种类型的字符串字面值: 转义字符串可以有转义字符, 以及原始字符串可以包含换行以及任意文本。原始字符串 使用三个引号(""")分界符括起来,内部没有转义并且可以包含换行以及任何其他字符:
字符串模版:字符串字面值可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:
val i = 10
println("i = $i") // 输出“i = 10”
val s = "abc"
println("$s.length is ${s.length}") // 输出“abc.length is 3”