Kotlin(2)数据类型

Kotlin(二)数据类型

一.基本数据类型

基本数据类型对照
基本数据类型名称kotlinjava
整型Intint、Integer
长整型Longlong、Long
浮点型Floatfloat、Float
双精度Doubledouble、Double
布尔型Booleanboolean、Boolean
字符型Charchar
字符串型StringString

 

 

 

 

 

 

 

 

 

在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是特殊的那个数据类型,它具备了许多可以操作自身的方法,这里就单独搞出来说一说。首先列一下字符串对象转换为其它六个数据类型的方法:

转换目标kotlinjava
整型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中的容器就不可以,下面是六种容器的初始化方法

名称初始化方法
只读集合SetsetOf
可变集合MutableSetmutableSetOf
只读队列ListlistOf
可变队列MutableListmutableListOf
只读映射MapmapOf
可变映射MutableMapmutableMapOf

 

 

 

 

 

 

 

 

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

 

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我们间的空白格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值