1. 类型声明
1.1 变量声明
在 Java 中 我们通过 类型 + 变量名
的格式来声明一个变量,例如:
public String string = "this is a string";
而在 Kotlin 中我们使用 变量名 + ‘:’ + 类型
这样的格式来声明变量,如下:
val string : String = "this is a new string"
这一点对于我们熟悉 Java 的同学来说,这很容易理解。不过是将变量和类型的顺序颠倒,然后用‘:’ 来表示类型,值得注意的是在 Kotlin 中是可以省略类型声明的,因为 Kotlin 有强大的类型推导。例如下面的代码,都可以精确的推导类型
val string = "this is string"
val intNum = 123
val floatNum = 123.0f
val longNum = 1314L
val doubleNum = 13.14
val doubleNum2 = 10.1e6
如果想要确认正确性,我们可以通过打印变量的类名即可print(string.javaClass.name)
,结果如下:
1.2 方法返回值
与变量的类型声明一样,也是和 Java 颠倒顺序,如下:
// 示例 1
fun out():Unit {
doSomething()
}
// 示例 2
fun sum(x:Int, y:Int):Int {
return x+y
}
Kotlin 中有这类型推导,在方法的类型上 如果类型信息没有跟在方法之后,会默认为 Unit 类型。如上的示例二代码,如果没有加上类型,那么就会报错:Kotlin: Type mismatch: inferred type is Int but Unit was expected
到这里你可能会说,Kotlin 不是有强大的类型推导吗? 就这?就这?
我知道你很急,但是你先别急,我们下面这个示例
fun sum(x:Int,y:Int) = x+y
是不是已经懵逼了?还可以这样玩?
没错,在 Kotlin 中可以使用表达式和等号的方式定义一个函数,这里在 Kotlin 中称之为表达式函数体
,你敢说这里没有类型推导的功劳吗(坏笑),当然这里需要注意的是,如果在递归方法中还是需要显式声明类型的。为了代码的可读性,一般公共方法的返回值也会显式的声明。
2. var&val傻傻分不清
与 Java 不同,在 Kotlin 声明变量的时候引入了 val 和 var 这两个关键词。我们简单理解 var 对应的就是Java 中普通声明变量的方式,而 val 理解为 加了 final 的变量。
val a = "string" ==> final String a = "string"
var a = "string" ==> String a = "string"
2.1 什么时候用 var & val?
通常情况在,我们声明变量的时候使用val,因为 val 声明的变量引用不可变的,在高并发场景不会引起偏差。
当我们需要一个局部可变变量的时候,例如遍历数组的中的数据求和场景,这时候就可以使用 var 来声明变量了