我的kotlin学习之旅-day3-2020-12-22

学习内容

1.Int类型
2.Array的声明与遍历
3.关于null
4.特殊类型
5.is ,as

package day1

fun main(args:Array<String>){
    testIntType()
    testArray()
    println(testStrLength(null))//0
    println(testStrLength("abc"))//3
    println(testStrLength2(null))//0
    println(testStrLength2("abc"))//3
    testNull()
    testUnit()
    testIs()
    testAS()
}

/**
 * as 类型转换
 */
open class Foo
class Goo:Foo()

fun testAS(){
    val f = Foo()
    val g = Goo()
    println(g as Foo)
}



/**
 * is 运算
 */
fun testIs() {
    val len = testLen("abc")
    println(len)
    println(testLen('X'))
    println(testLen(false))
}

fun testLen(ani:Any):Int{
    if(ani is String) {
        return ani.length
    } else if (ani is Char) {
        return 1
    } else if (ani is Boolean) {
        return 2
    } else if (ani is Number) {
        return 3
    }
    println("ani is nothing")
    return -1
}

/**
 * Unit类型,功能与Java中的void一样
 * 可以省略,返回值类型是Unit
 * Nothing类型表达式的计算结果永远不会返回
 * 与Java中的void一样
 * Nothing?唯一允许的值是null
 *
 * Any是非空类型层次结构的根
 * Any?是可空类型层次结构的根
 * Any?是Any的超集,是kotlin类层次结构的最顶层
 *
 */
fun testUnit():Unit{
    println("Hello Unit")
    val na:Nothing? = null

}

/**
 * 关于null
 * null的类型是Nothing?
 */
fun testNull(){
    //val s:String = null,报错,string不能为null
    val s:String? = null
    println(s) //null
   // s!!.length;  !!非空断言操作符,可以是空类型对象调用成员方法,
    // 但是遇到null时会抛出空指针异常//
    println(null==null)//true
    println(null is Any)//false
    println(null!=null)//false
    println(null is Any?) //true
    val ss:String? = "abc"
    //ss.length;编译报错,需要使用安全调用符
    val len = ss?.length;
    println(len)
}

/**
 * ?. 安全调用符
 * ?: Elvis运算符
 */
fun testStrLength(s:String?):Int {
    return s?.length ?: 0;
}
fun testStrLength2(s:String?):Int=s?.length ?: 0

/**
 * 数组等声明与遍历
 */
fun testArray(){
    val square = Array(5,{i ->  i*i})
    square.forEach(::println) //0,1,4,9,16
    square.set(0,20)
    square.forEach(::println)//20,1,4,9,16
    square[0] = 20 //
    square.forEach(::println)//20,1,4,9,16
}

/**
 * kotlin中的=:赋值
 * == : 比较运算,比较的是值,不是引用
 * ===:完全一致运算,值和引用都相等才一致
 *
 *
 */
fun testIntType(){
    val a:Int = 1000
    val b:Int = 1000

    println(a==b)//true
    println(a===b)//true

    //当变量为Int?可空类型时,变量都值小于128时,两个相同值都变量比较返回true
    //变量都值大于等于128时,两个相同值都变量比较返回false,与Java中等Integer类型一样
    val c:Int? = 127
    val d:Int? = 127
    println(c==d)//true
    println(c===d)//true
    val e:Int? = 128
    val f:Int? = 128
    println(e==f)//true
    println(e===f)//false
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容