二、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


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=mapOf("姓名" to “张三” , “性别” to "女")

Pair(键,值

val userMAp2:MutableMap=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数组名

你可能感兴趣的:(Kotlin学习,Android相关,kotlin,android,java)