【Kotlin 初学者】变量-常量-数据类型
作者简介:CSDN博客专家、华为云享专家认证
系列专栏:Kotlin 初学者
学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。
目录
变量
var 关键字
Kotlin 使用 var 关键字定义可变变量(可读可写),类似Java中的一般变量。
跟 Java 的区别就是 类型的位置从变量名前面挪到变量名后面了。如下图:
语法
实践
-
fun main() {
-
var str: String = "Hello Kotlin"
-
println(str)
-
str = "Hello ShuaiCi"
-
println(str)
-
}
运行结果
-
"E:\Android\Android StudioO\jre\bin\java.exe"...
-
Hello Kotlin
-
Hello ShuaiCi
-
-
Process finished with exit code 0
查看Java代码
仅赋值一次
-
fun main() {
-
var str: String = "Hello Kotlin"
-
println(str)
-
}
黄色提示:大致意思就是你的变量不会修改,可以使用 val 定义为不可变量变量,下面咱们看看
val 关键字
Kotlin 使用 val 关键字定义不可变变量,只能赋值一次的变量(类似Java中final修饰的变量),不是常量不能混淆呦。
语法
val <变量名> : <类型> = <初始化值>
实践
-
fun main() {
-
val age : Int = 100
-
println(age)
-
}
运行结果
-
"E:\Android\Android StudioO\jre\bin\java.exe"...
-
100
-
-
Process finished with exit code 0
查看Java代码
对不可变量进行再次赋值
提示:Val cannot be reassigned(Val 不能重新赋值)
内置数据类型(常用)
类型 | 描述 |
---|---|
String | 字符串 |
Char | 单字符 |
Boolean | true/false |
Int | 整形 |
Double | 小数 |
List | 集合 |
Set | 无重复的元素集合 |
Map | 键值对的集合 |
Kotlin的引用类型
- Java有两种数据类型:
-
引用类型(堆内存)
-
基本数据类型(栈内存)
-
-
Kotlin只提供引用类型这一种数据类型,出于更高性能的需要,Kotlin编译器会在Java字节码中修改为基本数据类型。
类型推断
对于已声明并赋值的变量,它允许你省略类型定义。
从上图你会发现 String 和 Int 都是灰色的。
提示:显式给定的类型在这里是多余的
移除掉显示的类型声明
实践
-
fun main() {
-
//类型推断
-
var type = "Hello Type"//自动推断为String
-
println(type)
-
-
var a = 10 //自动推断为Int
-
println(a)
-
-
var b = true //自动推断为Boolean
-
println(b)
-
-
var d :String //如果不在声明时初始化则必须提供变量类型
-
d = "HHH" //明确赋值
-
println(d)
-
}
运行结果
-
"E:\Android\Android StudioO\jre\bin\java.exe"...
-
Hello Type
-
10
-
true
-
HHH
-
-
Process finished with exit code 0
查看Java代码
编译时常量
编译时常量只能在函数之外定义,为什么?
因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时赋值。
编译时常量只能是常见的基本数据类型:String、 Int、Double、Float、Long.Short、Byte、Char、Boolean。
类似Java的public static final。
实践,如下:
-
const val MAX = 65535
-
fun main() {
-
println(MAX)
-
}
查看Java代码,如下:
"const"不适用于"局部变量",如下:
延迟初始化lateinit
-
使用lateinit关键字相当于做了一个约定:在用它之前负责初始化
-
执行islnitialized检查lateinit变量是否完成初始化
使用lateinit关键字
-
class UserInfo4() {
-
lateinit var name:String //属性延迟初始化
-
fun addName(_name:String){
-
name = _name
-
}
-
-
fun readName(){
-
//直接使用如果name未做初始化会报错。
-
println(name)
-
}
-
}
-
-
fun main() {
-
var userInfo4 = UserInfo4()
-
userInfo4.readName()
-
}
添加islnitialized检查
执行islnitialized检查lateinit变量是否完成初始化,未完成初始化则不执行打印。
惰性初始化by lazy
你可以暂时不初始化某个变量,直到首次使用它再进行初始化,这个叫作惰性初始化。
-
class UserInfo4() {
-
...
-
val age by lazy { ageAdd() }//惰性初始化
-
//如果不调用age, ageAdd()函数永远不执行
-
private fun ageAdd(): Int {
-
return 18
-
}
-
}
-
fun main() {
-
var userInfo4 = UserInfo4()
-
userInfo4.addName("Hello Kotlin")
-
userInfo4.readName()
-
println("------")
-
println(userInfo4.age)
-
}
正常执行
String 模板
-
模板支持在字符串的引号内放入变量值
-
字符串内嵌表达式。
-
fun main() {
-
val name: String = "Shuaici"
-
val age: Int = 18
-
val money: Float = 1.25f
-
//引号内放入变量值
-
println("$name 今年 $age ,身上带了 $money 巨款")
-
-
val isMan: Boolean = true
-
//添加表达式
-
println("$name 是个 ${if (isMan) "纯爷们" else "萌妹子"}")
-
}
运行结果
-
"E:\Android\Android StudioO\jre\bin\java.exe"...
-
Shuaici 今年 18 ,身上带了 1.25 巨款
-
Shuaici 是个 纯爷们
-
-
Process finished with exit code 0
自动补全(输出)
变量名.sout
看完了就上手练练,只看短时间能记住,时间长不用就忘记了,还要再看一遍(欢迎再来),还不如自己上手练一下。
文章来源: shuaici.blog.csdn.net,作者:帅次,版权归原作者所有,如需转载,请联系作者。
原文链接:shuaici.blog.csdn.net/article/details/121632693
- 点赞
- 收藏
- 关注作者
评论(0)