Kotlin基础之区间和类型转换

fun main(args: Array<String>) {

    // 1.区间可以使用.. 表示,  注意..在使用的时候要保证起始值要小于结束值
    // 输出1 2 3 4
    for (i in 1..4) {
        println(i)
    }
    // 没有输出, 因为起始值大于结束值了
    for (i in 4..1) {
        println(i)
    }

    println("=============")
    // 同样适用于char类型
    for (i in 'a'..'d') {
        println(i)
    }
    for (i in 'd'..'a') {
        println(i)
    }

    println("=============")
    // 2.如果想要从大到小, 可以使用downTo
    for (i in 4 downTo 1) {
        println(i)
    }

    // 3.如果想要一个从1到10但不包含10的区间, 可以使用until关键字
    // 打印 1 2 3 4 5 6 7 8 9
    for (i in 1 until 10) {
        println(i)
    }

    // 4.使用step关键字 可以指定步长
    // 输出1 3 5 7 9
    for (i in 1..10 step 2) {
        print(i)
        print(" ")
    }

    println()
    // 可以定义一个区间变量
    var range = 1..10
    // range同样含有很多可用的属性
    var first = range.first
    var last = range.last
    var start = range.start
    var step = range.step

    println("first : " + first)
    println("last : " + last)
    println("start : " + start)
    println("step : " + step)
    println("是否包含2, ${range.contains(2)}")
}

上述代码的运行情况如下:

1
2
3
4
=============
a
b
c
d
=============
4
3
2
1
1
2
3
4
5
6
7
8
9
1 3 5 7 9 
first : 1
last : 10
start : 1
step : 1
是否包含2, true

主要就是对:   .. ,  downTo, until以及区间的一些属性做了简单的测试和解读


关于Kotlin的类型转换, 举个简单的例子:

/**
 * Any就表示能接收任意类型的参数
 * Any是任何Kotlin类的父类
 * Int? 表示返回结果为Int型, 也可为null, 如果不加? 则不能返回null
 * The root of the Kotlin class hierarchy. Every Kotlin class has [Any] as a superclass.
 */
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 这里实际已经被转化成了String类型, 可以直接使用String的length属性
        println(obj.javaClass)
        println(obj.substring(1))
        return obj.length
    }
    println(obj.javaClass)
    return null
}

fun getStringLength2(obj: Any): Int? {
    if (obj !is String) {
        println(obj.javaClass)
        return null
    }
    // 这里实际已经被转化成了String类型, 可以直接使用String的length属性以及其他的属性如substring
    println(obj.javaClass)
    println(obj.substring(1))
    return obj.length
}

fun getStringLength3(obj: Any): Int? {
    // 也可以直接在 && 右边就把obj当作String来进行操作
    if (obj is String && obj.length > 0) {
        return obj.length
    }
    return null
}


fun main(args: Array<String>) {
    println(getStringLength("1111111"))
    println(getStringLength(123))
    println(getStringLength('a'))
    println(getStringLength2("1234567"))
    println(getStringLength3("890"))
}

对应的输出结果为:

class java.lang.String
111111
7
class java.lang.Integer
null
class java.lang.Character
null
class java.lang.String
234567
7
3
        Ktolin的自动类型转换实际就是如果使用is 关键字做了判断, 那么在对应的逻辑分支中该变量就会自动转化成对应的数据类型, 也就是可以直接把该变量当作对应的类型进行操作, 不需要再显示的转换类型


猜你喜欢

转载自blog.csdn.net/c1392851600/article/details/80442215