【Kotlin 初学者】变量-常量-数据类型

举报
帅次 发表于 2021/12/23 01:14:13 2021/12/23
【摘要】 作者简介:CSDN博客专家、华为云享专家认证 系列专栏:Kotlin 初学者 学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。 目录 变量 var 关键字 val 关键字 内置数据类型(常用) Kotlin的引用类型 类型推断 编译时常量 延迟初始化lateinit 使用lateinit...

作者简介:CSDN博客专家、华为云享专家认证

系列专栏:Kotlin 初学者

学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。

目录

变量

var 关键字

val 关键字

内置数据类型(常用)

Kotlin的引用类型

类型推断

编译时常量

延迟初始化lateinit

使用lateinit关键字

添加islnitialized检查

惰性初始化by lazy

正常执行

String 模板

自动补全(输出)


变量

var 关键字

        Kotlin 使用 var 关键字定义可变变量(可读可写),类似Java中的一般变量。

        跟 Java 的区别就是 类型的位置从变量名前面挪到变量名后面了。如下图:

        语法

        实践


  
  1. fun main() {
  2.     var str: String = "Hello Kotlin"
  3.     println(str)
  4.     str = "Hello ShuaiCi"
  5.     println(str)
  6. }

        运行结果


  
  1. "E:\Android\Android StudioO\jre\bin\java.exe"...
  2. Hello Kotlin
  3. Hello ShuaiCi
  4. Process finished with exit code 0

        查看Java代码

        仅赋值一次


  
  1. fun main() {
  2.     var str: String = "Hello Kotlin"
  3.     println(str)
  4. }

        黄色提示:大致意思就是你的变量不会修改,可以使用 val 定义为不可变量变量,下面咱们看看

val 关键字

        Kotlin 使用 val 关键字定义不可变变量,只能赋值一次的变量(类似Java中final修饰的变量),不是常量不能混淆呦。

        语法

val <变量名> : <类型> = <初始化值>

 

        实践


  
  1. fun main() {
  2.     val age : Int = 100
  3.     println(age)
  4. }

        运行结果


  
  1. "E:\Android\Android StudioO\jre\bin\java.exe"...
  2. 100
  3. 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 都是灰色的。

提示:显式给定的类型在这里是多余的

        移除掉显示的类型声明

        实践


  
  1. fun main() {
  2.     //类型推断
  3.     var type = "Hello Type"//自动推断为String
  4.     println(type)
  5.     var a = 10      //自动推断为Int
  6.     println(a)
  7.     var b = true    //自动推断为Boolean
  8.     println(b)
  9.     var d :String   //如果不在声明时初始化则必须提供变量类型
  10.     d = "HHH"       //明确赋值
  11.     println(d)
  12. }

        运行结果


  
  1. "E:\Android\Android StudioO\jre\bin\java.exe"...
  2. Hello Type
  3. 10
  4. true
  5. HHH
  6. Process finished with exit code 0

        查看Java代码

编译时常量

        编译时常量只能在函数之外定义,为什么?

        因为编译时常量必须在编译时赋值,而函数都是在运行时才调用函数内的变量也是在运行时赋值

        编译时常量只能是常见的基本数据类型:String、 Int、Double、Float、Long.Short、Byte、Char、Boolean。

        类似Java的public static final

        实践,如下:


  
  1. const val MAX = 65535
  2. fun main() {
  3.     println(MAX)
  4. }

        查看Java代码,如下:

"const"不适用于"局部变量",如下:

延迟初始化lateinit

  • 使用lateinit关键字相当于做了一个约定:在用它之前负责初始化

  • 执行islnitialized检查lateinit变量是否完成初始化

使用lateinit关键字


  
  1. class UserInfo4() {
  2.     lateinit var name:String //属性延迟初始化
  3.     fun addName(_name:String){
  4.         name = _name
  5.     }
  6.     fun readName(){
  7.         //直接使用如果name未做初始化会报错。
  8.         println(name)
  9.     }
  10. }
  11. fun main() {
  12.     var  userInfo4 = UserInfo4()
  13.     userInfo4.readName()
  14. }

添加islnitialized检查

        执行islnitialized检查lateinit变量是否完成初始化,未完成初始化则不执行打印。

惰性初始化by lazy

        你可以暂时不初始化某个变量,直到首次使用它再进行初始化,这个叫作惰性初始化


  
  1. class UserInfo4() {
  2.     ...
  3.     val age by lazy { ageAdd() }//惰性初始化
  4.     //如果不调用age, ageAdd()函数永远不执行
  5.     private fun ageAdd()Int {
  6.         return 18
  7.     }
  8. }
  9. fun main() {
  10.     var userInfo4 = UserInfo4()
  11.     userInfo4.addName("Hello Kotlin")
  12.     userInfo4.readName()
  13.     println("------")
  14.     println(userInfo4.age)
  15. }

正常执行

String 模板

  • 模板支持在字符串的引号内放入变量值

  • 字符串内嵌表达式。


  
  1. fun main() {
  2.     val name: String = "Shuaici"
  3.     val age: Int = 18
  4.     val money: Float = 1.25f
  5.     //引号内放入变量值
  6.     println("$name 今年 $age ,身上带了 $money 巨款")
  7.     val isMan: Boolean = true
  8.     //添加表达式
  9.     println("$name 是个 ${if (isMan) "纯爷们" else "萌妹子"}")
  10. }

        运行结果


  
  1. "E:\Android\Android StudioO\jre\bin\java.exe"...
  2. Shuaici 今年 18 ,身上带了 1.25 巨款
  3. Shuaici 是个 纯爷们
  4. Process finished with exit code 0

自动补全(输出)

        变量名.sout

        看完了就上手练练,只看短时间能记住,时间长不用就忘记了,还要再看一遍(欢迎再来),还不如自己上手练一下。

文章来源: shuaici.blog.csdn.net,作者:帅次,版权归原作者所有,如需转载,请联系作者。

原文链接:shuaici.blog.csdn.net/article/details/121632693

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。