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 关键字做了判断, 那么在对应的逻辑分支中该变量就会自动转化成对应的数据类型, 也就是可以直接把该变量当作对应的类型进行操作, 不需要再显示的转换类型