Kotlin基本数据类型
kotlin的基本数值类型包括Byte,Short,Int,Long,Float,Double等。与java有差别的是字符不属于数值类型,而是一个独立的数据类型。
而内存大小则Byte 8位,Short 16位,Int 32位,Long 64位,Float 32位,Double 64位。与Java基本没有差别。
字面常量
下面是所有类型的字面常量:
- 十进制:123
- 长整型以大写的L结尾:123L
- 16进制以0x开头:0x0F
- 2进制以0b开头:0b00001011
- ***注意:kotlin不支持8进制
kotlin同时也支持传统符号表示的浮点数值:
- Double默认写法:123.5,123.5e10
- Float使用f或者F后缀:123.5f
可以使用下划线使数字常量更易读:
val oneMillion = 1_000_000 val creditCarNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = ob11010000_010100_11100
比较两个数字
kotlin中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,kotlin帮你封装了一个对象。这样确保了不会出现空指针。数字类型也一样。所有在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别了。
* === :表示比较对象地址。
*==:表示比较两个值的大小。
类型转换
由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式的转换为较大的类型。这意味着在不进行显示转换的情况我们不能把byte型值赋给一个int变量。
val b: Byte = 1 //ok ,字面值是静态检测的 val i : Int = b //错误 //正确做法 val i :Int = b.toInt()
由此引出的各种数据类型转换方法。
toByte() : Byte
toShort():
toInt():
toLong():
toFloat():
toDouble():
toChar():
但是有些情况下也是可以使用自动类型转换的,前提是可以根据上下文环境推断出正确的数据类型而且数学操作符会做相应的重载。例如:
val 1 = 1L + 3 //Long + Int =》 Long
位操作符
对于Int和Long类型,还有一系列位操作符可以使用,分别是:
shl(bits) - 左移位(Java <<)
shr(bits) -右移位(Java >>)
ushr(bits) -无符号右移位(Java >>>)
and(bits) -与
or(bits) -或
xor(bits) -异或
inv() -反向
字符
和Java不同的是,kotlin 中Char不能和数字操作,Char必须是是单引号‘包含起来的,比如普通字符’0‘,’a'。
fun check(c : char) { if (c == 1) { //错误 类型不兼容 } }
字符字面值用单引号括起来:'1'.特殊字符可以用反斜杠转义。
支持以下转义序列:\t,\b,\n,\r,\',\",\\和\$。编码其他字符要用Unicode转义序列语法:"\uFF00"。
我们可以显示把字符转换位Int数字:
注意:倒数第二行不能少 - '0'.toInt() 否则打印 51 原因未知。
当需要可空引用时,像数字,字符会被装箱。装箱操作不会保留同一性。
布尔
布尔用Boolean类型表示,它有两个值:true和false。
若需要可空引用会被装箱。
内置的布尔运算有:
|| -短路逻辑或
&& - 短路逻辑与
! - 短路逻辑非
数组
数组用类Array实现,并且还有一个size属性及get和set方法。
由于使用[]重载了get和set方法。所以我们可以通过下标很方便的获取或者设置数组对应位置的值。
数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。如下所示我们分别是两种方式创建了两个数组:
注意:[] 运算符代表调用成员函数get()和set()。
注意:与Java不同的是,kotlin中数组是不型变的。(invariant)。
除此之外还有 ByteArray,ShortArray,IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高,其用法同Array一样。
字符串
和Java一样,String是不可变的。方括号[]语法可以很方便的获取字符串中的某个字符,也可以通过for循环来遍历:
kotlin支持三个引号''' '''括起来的字符串,支持多行字符串比如:
当然也可以通过.trimMargin()删除多余的空白。
字符串模板
字符串可以包含模板表达式,即一些小段代码,会求值并把结果合并到字符串中。模板表达式以美元符($)开头,由一个简单的名字构成:
或者用花括号扩起来的任意表达式:
原生字符串和转义字符串内部都支持模板。如果你需要在原生字符串中表示字面值$字符(它不支持反斜杠转义)。可以使用下列语法: