二、Kotlin数据类型
Kotlin数据类型分享
1.基本数据类型
- 基本类型
Int,Long,Float,Double,Boolean,Char,String
- 类型之间的转换
toInt(),toLong(),toFloat(),toDouble(),toBoolean(),toChar(),toString()
2.数组
(1)数组的声明
- 基本数据类型数组的声明
intArrayOf(...),longArrayOf(...),floatArrayOf(...),doubleArrayOf(...),booleanArrayOf(...),charArrayOf(...)
举例说明使用方法
var int_Array:IntArray=intArrayOf(1,2,3)
var long_Array:LongArray=longArrayOf(1,2,3)
var float_Array:FloatArray=floatArrayOf(1f,2f,3f)
var double_Array:DoubleArray=doubleArrayOf(1.0,2.0,3.0)
var boolean_Array:BooleanArray=booleanArrayOf(true,false,true)
var char_Array:CharArray=charArrayOf('a','b','c')
- String类型数组声明(其他数据类型也可以这样声明,String不可以使用上边的方法)
var string_Array=arrayOf("中国","北京","上海")
(2)数组元素操作
- 获取数组长度
通过array.size;array.count();
- 修改元素
下标形式:修改array[2]=6(将第三个元素修改为6);
方法调用形式:修改array.set(1,8)(将第二个元素修改为8)
- 获取元素
下标形式:获取str=array[i]
方法调用形式get:获取array.get(i),获取指定位置的元素
elementAt:获取指定位置的元素
first:获取第一个位置元素
last:获取最后一个元素
getOrNull:获取指定位置的元素,如果没有获取成功会返回null,避免数组越界
- 是否包含元素:contains方法
contains方法判断集合中是否包含某个元素,返回值为布尔
- 获取元素索引:indexOf()方法
indexOf获取元素对应的位置,如果数组中不存在即返回-1
- 反转元素:reverse()方法
reverse将数组元素倒序排列
- 遍历数组
for循环
val i:Int=0
for (i in array){
println(i)
}
迭代器
val iterator=array.iterator();
for (item in iterator.iterator()){
println(item)
}
while循环
var str:String=""
var i:Int=0
while (i<arrayOf.size){
str=str+arrayOf[i]+","
i++
}
println(str)
3.字符串
(1)类型转换(String对象为str)
转整型toInt;转长整型toLong;转浮点型toFloat;转双精度型toDouble;转布尔toBoolean;转字符型toChar;
注意:int和long的转换时带小数点的数值转换时肯定会报错,转换时必须转换成只有数字
(2)字符串的操作
获取元素索引:indexOf
截取:substring(开始位置,结束)
替换:replace("替换前",“替换后")
分割:split(分割字符) Java中 split()返回的是一个String[], 而 kotlin中返回的是一个 List
获取指定位置得字符:get(),str[i]
(3)字符串模板和拼接
占位符${...}
举例:val str="用户的昵称是${user.name}"
val str2="str的值是$str"
注意:如果在取值之前还要先运算,则需用大括号把运算表达式给括起来
符号$后面跟变量名,系统会自动匹配最长的变量名。比如打印出来的是str2而不是str
(4)如何显示货币得$
方法一:${'$'}
${} 还是字符串占位格式,其中包含的'$'表示 $ 符号
方法二: \$
\表示转义,\$转义后得到 $
4.容器
(1)容器的基本操作
- 分类
分为可变和不可变,可变就是能进行增删改查操作
不可变容器:Set,List,HashMap
可变容器:MutableSet,MutableList,MutableHashMap
- 通用方法
- 是否为空----isEmpty
- 是否非空----isNotEmpty
- 清空容器----clear
- 是否包含指定元素----contains
- 获取迭代器----iterator
- 获取长度和个数----count,size
- 初始化容器
kotlin的容器可以再定义的时候进行初始化和定义
初始化函数
listOf(),mutableListOf(),setOf(),mutableSetOf(),hashMapOf(),MutableHashMapOf()
(2)Set/MutableSet
- 特点
- 内部元素无序
- 内部元素唯一(根据哈希值判断,重复即覆盖)
- mutableset中的add只添加元素,但是不知道添加的位置
- mutableset没有修改元素值得方法,元素被添加后就不可修改
- set不可变,mutableset可变
- mutableset得remove()仅接收元素作为对象,不能接收索引,因为set是无序得
- 遍历方式
- for-in
for(user in userSet){ ... }
-
- 迭代器(迭代器中存的并非是真是元素,而是元素地址,类似c中得指针)
val iterator=userSet.iterator()
while(iterator.hasNext()){
val user=iterator.next()
... }
-
- forEach(使用默认it代表内部元素)
userSet.forEache{"用户的姓名为${it.name}"}
(3)List/MutableList
- 特点
- 有序有索引
- 可以通过set/get设置和获取值
- 通过add添加元素
- removeAt可以删除指定索引得元素
- 遍历方式
除了 for-in 、迭代器、forEach, 还有一种根据索引遍历的方式:
// indices 表示userList的索引数组。这种方式本质上也是采用了for-in, 但遍历的是索引
for(i in userList.indices){
val user=userList[i]
... }
- 排序
- MutableList 可以执行排序的操作:
- sortBy 按照规则升序排列
- sortByDescending 按规则降序排列
(4)Map/MutableMap
- 特点
以键值对形式存储数据,键是唯一得
- 初始化(to 模式底层也是使用 Pair()对象构建的)
调用 mapOf / mutableMapOf 执行初始化,在组织键值对元素时都有如下两种方式:
键 to 值
val userMap:Map<String,String>=mapOf("姓名" to “张三” , “性别” to "女")
Pair(键,值
val userMAp2:MutableMap<String,String>=mutableOf(Pair("姓名",“张三”), Pair("性别",“女"))
- 常用方法
- 是否包含某个元素:containsKey
- 是否包含默认值:containsValue
- 添加修改元素:put
- 删除元素:remove
- 遍历
三种模式:for-in 、 迭代器、 forEach
由于元素是一个键值对,所以,在遍历获取到元素之后可以视需要根据元素取出对应的key 和 value
for(item in userMap){
val str="用户的${item.key} 为 ${item.value}" }
5.控制语句
初始化数据 private val newA="java"
private val newB="android"
private val newC="ios"
(1)分支条件----简单分支if/else
kotlin中得if/else具有返回值,类似java中得三目运算符
tv_judge_result.text=if (isJudge) newA else newB
也可以如java中一样使用
(2)分支条件----多分支when/else
kotlin中没有switch/case
- 特点
- when/else也有返回值
- 执行完一个节点后就会终止循环
- 分支中判断条件可以是常量/变量/表达式-----java中switch/case,中case节点只能是常量
- 为了确保所有条件都做了判断else不可以省略
- 用法(判断条件也可以是常量/变量/表达式,仅举例常量)
var num = "0"
tv_judge_result.text = when (num) {
"0" -> newB
"1" -> newA
else -> newC
}
- 穿透
- 逗号隔开:多个条件写一行
- in..起始值...结束值:如果条件连续数值
- !in..起始值...结束值:如果条件是连续数值,并且判断不在区间范围内
- is 关键字:用来判断 A 是否为 B 的实例—— A is B ,等同于 Java中的 A instance B
举例
tv_answer.text = when (count) {
1,3,5,7,9 -> "取值为13579中的一个"
in 13..19 -> "取值为13到19中的一个"
!in 6..10 -> "取值不再6到10之间"
else -> "其他值" }
(3)循环处理
- 遍历循环
for...in,foreach,迭代器
条件循环--满足某个条件时终止/开始循环
- 关键字
until:for (i in 11 until 66) { }
遍历11到66之间的数值,until 声明了一个左闭右开的区间——不包含66,包含11
setp:for (i in 23..89 step 4) {}
遍历23-89之间的数值,步进为4——每次+4。23..89声明一个左右均闭合的区间
downTo:for (i in 50 downTo 7) { }
倒序遍历从50到7
whlie,do/while:复杂逻辑使用,用法跟java类似
(4)中断处理
-
- break:中断循环
- continue:跳出本次循环
基本用法跟java类似,当嵌套循环时,还可以通过 @循环标签名 指定要中断的循环
{var i:Int = 0
var is_found = false
// outsize@ 表示为外层循环添加标签,名称为 outside
outside@ while (i < poemArray.size) {
var j:Int = 0
var item = poemArray[i];
while ( j < item.length) {
if (item[j] == '一') {
is_found = true
//中断标签名为outside的循环
break@outside
}
j++
}
i++ }
(5)空处理
- 字符串的有效判断(校验空字符串的方法)
- isNullOrEmpty —— 为null或长度为0时返回true。
- isNullOrBlank —— 为null或长度为0或者全是空格,返回true。
- isEmpty —— 长度为0时返回true,必须先判断非null
- isBlank —— 长度为0或者全是空格返回true,必须先判断非null
- isNotEmpty —— 长度大于0时返回true,必须先判断非null
- isNotBlank —— 长度大于0并且非空格返回true,必须先判断非null
- 声明可空变量
kotlin默认变量非空,如果需要声明一个可空的变量,则在类型后面加一个?
举例:var str:String?
- 校验空值的运算符----?,?:,!!
?--->表示可空,如果空直接返回null
?:--->表示一旦为空则返回冒号后面的值,否则返回正常的值
!!--->表示断言非空(放弃非空判断),但是如果做了这个断言,但依然返回空,就会报空指针
(6)等式判断
- 结构相等
==/!=:判断两个数据是否相等/不等
kotlin中的==跟java中的equals一样
注意:kotlin中比较字符串时不再比较内存中的内存地址,而是直接比较变量值,这种方式叫做结构相等,即模样相同外观相同。
- 引用相等
===/!==:引用相等既是判断内存地址是否一样
对于基本数据类型包括String,结构相等和引用相等是一致的
通过clone得到的对象即便属性值一样,但引用地址不一样
- is和in
is/!is:判断a是否是b的实例,如对象名is类名
in/!in:判断数组中是否包含某个元素,如变量名in数组名
更多推荐

所有评论(0)