Kotlin(二)数据类型
一.基本数据类型
基本数据类型名称 | kotlin | java |
---|---|---|
整型 | Int | int、Integer |
长整型 | Long | long、Long |
浮点型 | Float | float、Float |
双精度 | Double | double、Double |
布尔型 | Boolean | boolean、Boolean |
字符型 | Char | char |
字符串型 | String | String |
在java中声明变量我们会这样:int i = 0;
但在kotlin中声明变量不可以是Int i = 0;正确的声明方式是var i:Int = 0;另外类型之间的转换kotlin有自己的一套方法,即“to+类型名”,例如转为字符串型就是f.toString(),可参考如下:
类型转换方法 | 说明 |
---|---|
toInt | 转整型 |
toLong | 转长整型 |
toFloat | 转浮点型 |
toDouble | 转双精度数 |
toChar | 转字符 |
toString | 转字符串 |
二.数组
kotlin中数组的类型名称是以“数据类型名+Array”的形式来命名,例如IntArray,它的初始化方法就是intArrayOf()。一般的数组初始化方式如下:
var array1:IntArray = intArrayOf(1, 2, 3)
var array2:LongArray = longArrayOf(100, 200, 300)
var array3:FloatArray = floatArrayOf(1.0f, 2.1f, 3.4f)
var array4:DoubleArray = doubleArrayOf(1.0, 2.3, 3.5)
var array5:BooleanArray = booleanArrayOf(true, false, true)
var array6:CharArray = charArrayOf('a', 'W', 'G')
你会发现这里少了String类型数组的初始化,因为String本身是一个特殊的数据类型,kotlin中没有StringArray的数组类型,所以对于String类型数组的声明要用Array<String>的方式:
var array_string:Array<String> = arrayOf("bom", "adc", "def");
同样的其余的六种数据类型也可以用这种方式来声明数组:
var array_int:Array<Integer> = arrayOf(1, 2, 3);
var array_long:Array<Long> = arrayOf(11, 111, 111);
var array_float:Array<Float> = arrayOf(1f, 1.6f, 3.8f);
var array_double:Array<Double> = arrayOf(1.9, 44.9, 3.0);
var array_boolean:Array<Boolean> = arrayOf(true, false, false);
var array_char:Array<Char> = arrayOf('s', 'E', 'E');
kotlin的数组对象的取值和java一样,都是以array_int[i]的方式来取值,但是kotlin数组对象还提供了get、set方法来操作数组数据,即array_int.get(i); array_int.set(0, 44);不过set方法不太常用,kotlin推荐使用array_int[0]=44。对于所有的数组类型都可以用in和!in关键字来判断数组中是否包含某元素:
var array1:Array<Int> = arrayOf(1, 32, 43, 5)
var mark:Boolean = 32 in array1
三.字符串
前面提到了String是特殊的那个数据类型,它具备了许多可以操作自身的方法,这里就单独搞出来说一说。首先列一下字符串对象转换为其它六个数据类型的方法:
转换目标 | kotlin | java |
---|---|---|
整型 | str.toInt() | Integer.parseInt(str) |
长整型 | str.toLong() | Long.parseLong(str) |
浮点型 | str.toFloat() | Float.parseFloat(str) |
双精度 | str.toDouble() | Double.parseDouble(str) |
布尔 | str.toBoolean() | Boolean.parseBoolean(str) |
字符数组 | str.toCharArray() | str.toCharArray() |
kotlin的字符串对象也提供了查找、截取、分割、拼接等一些方法
var str:String = "wode boke.xxx.no.money"
if (str.indexOf('b') > 0) {//查找
str = str.substring(0, str.indexOf('b'))//截取
}
var str_array:List<String> = str.split('.')//分割,java会返回String[]对象,kotlin则返回List<String>对象
而且它的字符串对象本身就可以被看做是一个字符数组,可以直接用下标的形式或者get方法来获取对应位置的字符,不像java的字符串对象要获取某一位置的单个字符还要去调用subString(index, index+1);
关于字符串的拼接,kotlin设计的也是非常优秀,不再需要加号进行字符串的拼接(java的那种用加号拼接字符串在kotlin中也是可以使用的,因为它完整的兼容java):
var str1:String = "123"
var str2:String = "密码是:$str1"
var str3:String = "qwer${"$123"}$str1"//${""}即为转义声明,{}中的字符串可以按原样打出
var str4:String = "qwer\$$str1"//如果只需要转义一个$字符,在$前加上反斜杠\即可
四.容器
kotlin中也有三种容器:Set集合、List队列、Map映射,他们各自又有只读和可变两种操作类型,普通的Set、List、Map对象都是只读的类型,而加上Mutable前缀就为可变类型,即MutableSet、MutableList、MutableMap,只有可变才能对容器进行增删改操作。这三种容器的公有方法:
isEmpty是否为空
isNotEmpty是否非空
clear清空容器
contains是否包含指定元素
iterator获取迭代器
count获取元素个数,或者用size属性获取
初始化:
var list1:List<Int> = listOf(1,2,3)
kotlin的容器允许在声明时就进行初始赋值,但在java中的容器就不可以,下面是六种容器的初始化方法
名称 | 初始化方法 |
---|---|
只读集合Set | setOf |
可变集合MutableSet | mutableSetOf |
只读队列List | listOf |
可变队列MutableList | mutableListOf |
只读映射Map | mapOf |
可变映射MutableMap | mutableMapOf |
1.Set/MutableSet
特性:
- 元素不按顺序排列,无法按下标进行访问
- 元素存在唯一性,相同元素会被覆盖
- MutableSet没有修改元素的方法,要么添加,要么删除
三种遍历方式:
- for-in
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
for(item in set1){
println("当前数据:$item")
}
- 迭代器
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
val iterator1 = set1.iterator()
while(iterator1.hasNext()) {
val item = iterator1.next()
println("当前数据:$item")
}
- forEach
kotlin提供了即为精简的一种遍历方式forEach方法,在编码时forEach方法采用匿名方法的形式,内部用it变量来代替每个元素
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
set1.forEach {
println("当前数据:$it")
}
2.List/MutableList
特性:
- 队列可以通过get方法获取指定位置的元素,也可以直接通过下标获取指定位置元素
- MutableList的add方法默认添加新元素至队列末尾,也可以添加到指定位置
- MutableList的set方法允许修改指定位置的元素
- MutableList的removeAt方法删除指定位置的元素
- 除了上述的三种遍历方式外,队列还有一种按下标遍历的方式
val list1:MutableList<Int> = mutableListOf(1, 2, 3)
for (i in list1.indices) {//indices是下标数组,从0开始
println("当前数据:${list1[i]}")
}
3.Map/MutableMap
- 映射的containsKey方法判断是否存在指定键名的元素
- MutableMap的put方法会先去查找是否存在该键名的元素,如果存在就将值替换掉,不存在就添加新元素
- MutableMap的remove方法是通过键名来删除元素
- mapOf/mutableMapOf方法初始化映射时有两种方式:一个是“键名 to 键值”,另一种是Pair方法
var map1:Map<String, Int> = mapOf("数值1" to 12, "数值2" to 14, "数值3" to 42)
var map2:Map<String, Int> = mapOf(Pair("数值1", 12), Pair("数值2", 13), Pair("数值4", 41))
对于他的遍历来说,和set唯一的不同是他每一个item对象都包含了key和value两个子属性值,直接调用item.key和item.value就可以获取到值了
OK,kotlin的数据类型常用的知识差不多就是这些,基本上都是在java的基础上进行精简,其本质并没有什么变化,使用起来并没有什么难度,多敲几遍应该就可以记住。下一篇我们来说控制逻辑https://blog.csdn.net/qq_37159335/article/details/90765102