Kotlin-变量定义
- 变量定义
- 整型
- 浮点型
- 字符型
- 整型之间的转换
- Boolean类型
- Null安全
- 安全调用
- Elvis运算
- 字符串
变量定义
Kotlin可以定义的时候不标明数据的数据类型,编译器会根据初始值确定类型
fun main() {
var b:Int
var name = "crazyit.org"
//声名变量的时候指定初始值,编译器会根据初始值确定该变量的类型为String
b = 20
// name = 12 //①The integer literal does not conform to the expected type String
var sum :String = 500 //当变量的类型已经确定,但是用户赋值不一致时会报错
val a = "你好"
// a = "123" //②Val cannot be reassigned
}
整型
提供4种类型:Byte、Short、Int、Long
但是Kotlin时安全语言,所以不允许为空,如果需要存储空值的话就需要使用Byte?、Short?、Int?、Long?。
普通类型的整数类型会映射到java的基本类型;带?的数据类型会映射到基本类型的包装类型,
比如:Int类型映射到java的int类型,Int?类型映射到java的Integer类型
Kotlin不支持八进制的整数
浮点型
Kotlin的浮点型又有两种
1、Float
2、Double
除此之外,在Kotlin中还有3个特殊的浮点型数值:正无穷大、负无穷大和非数,例如,使用一个正数除以0.0或对负数将得到正无穷大数值,使用一个负数除以0.0将得到负无穷大数值,0.0除以0.0或对负数开方将得到一个非数
fun main() {
var af1=5.2345556f
println(af1) //输出5.2345557
// var af2:Float = 25.2345 //会报错,因为25.234默认时Double
//f1的类型为Double
var f1 = 5.12e2
println("f1的值为${f1}")
var a= 0.0
println("5.0/a的值为:${5.0/a}") //5.0/a的值为:Infinity(无穷大)
//所有的正无穷数都相等
println("${5.0/a == 5000/a}") //true
println("-5.0/a的值为:${-5.0/a}") //-5.0/a的值为:-Infinity
var nan :Double = a/a
println("${nan}") //NaN,表示非数
println("${nan === nan}") //false 非数自己与自己不相等
}
字符型
字符型通常表示单个字符,字符型值必须使用单引号(')括起来。在Kotlin中char类型就是简简单单的字符型,不能当作整型使用
整型之间的转换
Kotlin与java不同,Kotlin不支持取值范围小的数据类型隐式转换为取值范围大的类型。
Kotlin要求不同整型的变量之间或值之间必须进行显示转换
Any类型是所有Kotlin的根父类
Boolean类型
Null安全
var str= "fkit"
//由于 str 转换为 Int 有可能失败,故 num 有可能没有值
//因此不能使用 Int 来声明 num 的类型
var num1: Int = str.toIntOrNull() //失败
var num2: Int? = str.toIntOrNull() //成功
println (num1)
安全调用
user?.dog?.name
如果user属性不为空则返回dog熟悉,如果dog属性不为空则返回dog的name属性,这就是Spring EL的安全调用,使用 “?.”进行安全调用
Elvis运算
var len = b?.length?:-1
?:是Elvis运算符,如果?: 左边的表达式不为null,则返回左边表达式的值,否则则返回?:右边表达式的值,由于在Kotlin中retuen和throw都属于是表达式,因此他们也都可以用在“?:”运算符的右边。
字符串
用三个引号引起来的部分都是字符串的内容,包括换行等各种特殊的字符