原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02)

作者:Antonio Leiva

时间:Nov 28, 2016

原文链接:http://antonioleiva.com/variables-kotlin/

Kotlin系列课程的第二课:Kotlin中变量不同于Java: var 对val。

在这第二章节中,我们将了解Kotlin中变量是怎样工作的,什么是val和var,什么时间使用它们。

我从这开始,是因为理解这部分内容对后续讨论怎样在类中创建“字段”时非常有用(还可了解它们不是字段)。

Kotlin变量

如Java那样,只要在变量的范围内执行代码,Kotlin变量就可以被赋值、修改,在程序中不同位置被使用。

但是,我们将聚焦在它与Java不同的方面。

  • 变量分可变的和不可变的

在Java中也分可变与不可变(如果不希望变量被改变,可将变量说明为final),但是在Kotlin中,更简洁的、更常用的是:只要可能,Kotlin中首选时不变值

事实上,在程序中大部分地方使用不可变的变量,可带来很多益处,如:可预测的行为和线程安全。

  • 用val或var声明变量,指明它们是不可变的或可变的

在Kotlin中有趣的是大部分情况你不需要说明你使用对象的类型,而编译器就是推断它。

所以,我们只需要依据要产生的变量类型填写var或val,其类型通常能够被推断出来。我们也可以明确地指定变量类型。

一些例子:

1 var x = 7
2 var y: String = "my String"
3 var z = View(this)

说明:如你所见,你不需要用new来创建对象的新实例。

  • 类型转换是自动完成的

无论何时,编译器能够检测没有其它可选项,自动地完成类型转换。非常棒!

1 val z: View = findViewById(R.id.my_view)
2
3 if (z is TextView) {
4     z.text = "I've been casted!"
5 }

看见我没有调用setText()吗?这将在下一篇说明!

  • 在Kotlin中,所有都是对象

没有基本类型,没有void。如果有时没有返回值,实际时返回Unit对象。大多数情况下,Uint可以省略,但是它确实存在的,被隐藏了。

因此,所有这些比哪里都是对象:

1 val x: Int = 20
2 val y: Double = 21.5
3 val z: Unit = Unit

  • 简洁的数字类型不能赋值给复杂的类型

例如,整形不能赋值长变量。下面的代码不能通过编译:

1 val x: Int = 20
2 val y: Long = x

你需要明确的进行转换:

1 val x: Int = 20
2 val y: Long = x.toLong()

结论

这些是在Java和Kotlin之间能够找出的明显不同之处。通常,Kotlin变量提供更加灵活的安全的(由于任何可能时用val约定)和更清晰的简洁的代码

仍有疑问?准备阅读下篇!

转载于:https://www.cnblogs.com/figozhg/p/6119545.html

Kotlin中变量不同于Java: var 对val(KAD 02)相关推荐

  1. java val变量声明_Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 时间:Nov 28, 2016 原文链接:http://ant ...

  2. 在kotlin中启动activity发生java.lang.RuntimeException: Unable to instantiate activity ComponentInfo for Kot

    在kotlin中启动activity发生java.lang.RuntimeException: Unable to instantiate activity ComponentInfo for Kot ...

  3. java 接口中变量修饰符,Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: ? Java 的修饰符很多,分为访问修饰符和非访问修饰符.本节仅介绍访问修 ...

  4. java创建数组大小为n_如何通过提供大小在Kotlin中创建一个像Java一样的数组?

    根据 reference,数组按以下方式创建: >对于Java的原始类型,存在不同的类型IntArray,DoubleArray等,它们存储unboxed值. 它们是使用相应的构造函数和工厂函数 ...

  5. Scala 变量定义/类型推导/var和val的区别

  6. Kotlin专题「二」:变量(var与val)、常量、注释

    前言: 莫问良人长与短,从此山水不相逢. 一.概述   大家都知道 Kotlin 现在被 Gooogle 定为 Android 的官方开发语言.Kotlin 在项目中的使用将会越来越广泛,这也掀起了一 ...

  7. Kotlin中使用简洁明了的代码替换findViewByid

    第一种(推荐使用) Kotlin Android 扩展插件(Android Studio 内置) 首先添加 apply plugin: 'kotlin-android-extensions' 官方示例 ...

  8. 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)

    文章目录 I . Kotlin 变量总结 II . Kotlin 非空变量 III . 非空变量不能赋空 IV . lateinit 关键字 V . lateinit 初始化判定 VI . Kotli ...

  9. 教你如何完全解析Kotlin中的注解

    简述: 从这篇文章将继续开始探索Kotlin中的一些高级的内容,之前有着重探讨了Kotlin的泛型以及泛型型变等内容.现在我们一起来看下Kotlin中的注解.Kotlin中的注解是100%与Java注 ...

最新文章

  1. spring中IOC设计与实现
  2. 爬虫基础学习 转【http://www.cnblogs.com/huangxincheng/archive/2012/11/08/2759752.html】
  3. 10kv电压互感器型号_10kv电流互感器的一次电流选择应遵循的基本原则
  4. 足不出户完成交付独家交付秘籍(第二回)
  5. 和君:建设你的知识结构书单
  6. 结巴分词有前空格_NLP 分词的那些事儿
  7. Unity 父子约束 手持弓箭
  8. Rescue-Prime hash STARK 代码解析
  9. 图像属性——老照片特效
  10. 首次!TinyML低功耗边缘侧机器学习技术论坛-亚洲分会来到中国!
  11. 【国产数据库】GBase学习⑤ - gsql 客户端连接工具
  12. Vue2.x动态添加路由实现
  13. Oralce查询当年的数据
  14. 最伟大的软件Unix---英雄迟暮
  15. windows批量移动文件bat脚本
  16. 使用HTML5制作的网页游戏-管道小鸟(附源码)
  17. Java开发基础面试题,北大青鸟java培训多久
  18. 梦幻西游手游服务器维护公告,梦幻手游1月25日维护公告:新春活动开启
  19. 一文读懂区块链隐私技术系列之佩德森承诺(Pedersen Commitment)以及应用
  20. 关于erf(误差函数)思考

热门文章

  1. stackexchange.mysql_StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
  2. 笔记本电脑性价比排行2019_笔记本电脑性价比排行2020榜单介绍
  3. mac apache 日志_Mac OS X中的Apache日志文件并进行分析
  4. java 异常面试问题_Java异常面试问答
  5. kotlin内联函数_Kotlin内联函数,参数化
  6. Java中的System.exit()
  7. developerDiskImage文件提取
  8. C++基础教程之如何定义数字
  9. Java基础:参数是如何传递的
  10. Linux下自动化监控内存、存储空间!