在Kotlin中,常量必须用val关键字来声明,而变量必须用var关键词来声明,他们的声明方式如下:
val b : Boolean = true
var a : Int = 2
常量
常量的值是不可改变的,即在常量被定义后,在程序的任意地方都不可以改变它的值。
在其他编程语言中,对常量的修饰的关键字或常量名有一定的限制(在Java中,常量必须用 final修饰,在 PHP中常量名只能由英文字母、数字、下划线组成),但在kotlin中常量名还可以用中文汉字来表示。
val 最大值 :Int = 20
val min :Int = 1
变量
在Kotlin中,不指明变量的类型,编译器也能分析出 = 后的表达式的值,并将它的类型作为变量的类型,这是Kotlin的特点之一:类型推断。如下:
var str ="hello world!"
如果变量没有初始化值,编译器无法推断出它的类型,这时就必须显式地指定类型,如下:
var str1 : String
但是 Kotlin推荐尽可能地使用 val 来声明变量,仅在必要的时候使用 var。
变量的值可以被改变,它没有固定值,即当变量被定义、赋值后,在程序中可以修改,最后的值由代码决定(距离程序结果最近)
var var4 = 5
set(value){
if(value <= 5)
field = value
}
fun main(args: Array<String>) {
var4 = var4 + 5
println("var4:"+var4)
var4 = var4 - 2
println("var4:"+var4)
}
在上面的代码中,我们演示了Kotlin中的变量声明,和set()函数的使用,对于Kotlin中的变量,它默认会有setter和getter函数,我们如果对变量重写了这个函数,就会对原有的函数覆盖,我们还是使用了Kotlin中的备用字段 field
基本类型
1、数字
var age: Int = 12
var price: Double = 45.0
var distance: Float = 78f
var shortType: Short = 45
var longType: Long = 99
var byteType: Byte = 12
需要注意的是: 在Kotlin中 较小类型并不是较大类型的子类型,因此较小的类型不能隐式转换为较大的类型,如下:
var c:Int= 100
var d: Long = c // TODO error: Type mismatch
数字之间的转化,应该使用显示转换。每个数字类型都支持如下的转换:
- Byte:toByte()
- Short:toShort()
- Int: toInt()
- Long:toLong()
- Float:toFloat()
- Double:toDouble()
并且算术运算时也会有重载做适当转换:
var l = 1L + 3 // TODO Long + Int => Long
2、字符
在Kotlin中,字符用 Char 类型表示,它们不能直接当作数字。字符字面值用单引号括起来: ‘1’。 特殊字符可以用反斜杠转义。 支持这几个转义序列:\t、 \b、\n、\r、\’、\”、\ 和 $。 编码其他字符要用 Unicode 转义序列语法:’\uFF00’,字符也支持显示转换:
- toChar(): Char
具体使用如下:
var charType: Char = 'a'
3、布尔值
布尔用 Boolean 类型表示,它有两个值:true 和 false。若需要可空引用布尔会被装箱。内置的布尔运算有:
- 短路逻辑或运算 : ||
- 短路逻辑与运算 : &&
- 逻辑运算 非 : !
具体使用如下:
var flag: Boolean = true
引用类型–String字符串
字符串用 String 类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i]。 可以用 for 循环迭代字符串,如下:
val str = "abcd"
for (c in str) {
println(c)
}
在Kotlin中有一个新特性,叫做 字符串模板 。它可以让你在字符串字面值中引用局部变量只需要在变量名称中加上字符 $ ,这等价于使用 ‘+’连接字符串。如果要在字符串中使用 $ ,可以使用转义符 $ 。如果要引用更复杂的表达式,只需要把表达式用花括号括起来然后在前面加上 $即可,具体使用如下:
val str = "abcd"
for (index in str.indices) {
println("in $index is ${str[index]}")
}