Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02)
时间: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,其类型通常能够被推断出来。我们也可以明确地指定变量类型。
一些例子:
var x = 7
var y: String = "my String"
var z = View(this)
说明:如你所见,你不需要用new来创建对象的新实例。
类型转换是自动完成的
无论何时,编译器能够检测没有其它可选项,自动地完成类型转换。非常棒!
val z: View = findViewById(R.id.my_view)
if (z is TextView) {
z.text = "I've been casted!"
}
看见我没有调用setText()吗?这将在下一篇说明!
在Kotlin中,所有都是对象
没有基本类型,没有void。如果有时没有返回值,实际时返回Unit对象。大多数情况下,Uint可以省略,但是它确实存在的,被隐藏了。
因此,所有这些比哪里都是对象:
val x: Int = 20
val y: Double = 21.5
val z: Unit = Unit
简洁的数字类型不能赋值给复杂的类型
例如,整形不能赋值长变量。下面的代码不能通过编译:
val x: Int = 20
val y: Long = x
你需要明确的进行转换:
val x: Int = 20
val y: Long = x.toLong()
结论
这些是在Java和Kotlin之间能够找出的明显不同之处。通常,Kotlin变量提供更加灵活的、安全的(由于任何可能时用val约定)和更清晰的、简洁的代码。
仍有疑问?准备阅读下篇!
Kotlin中变量不同于Java: var 对val(KAD 02)的更多相关文章
- Kotlin 变量和常量的声明(var和val)
Kotlin有着非常非常智能化的声明变量方式.叫做类型推断 声明变量要使用关键字var和val. var声明方式第一种(自动推断): var nub=1231://自动定义整数型 使用分号 var c ...
- Kotlin技术入门以及和Java对比.md
一.Kotlin基础环境搭建 Android studio的版本大于3.0 直接支持Kotlin语法,直接创建即可; Android studio的版本小于3.0,步骤如下: 需要下载插件 插件搜索 ...
- kotlin中的嵌套类与内部类
Java中的内部类和静态内部类在Java中内部类简言之就是在一个类的内部定义的另一个类.当然在如果这个内部类被static修饰符修饰,那就是一个静态内部类.关于内部类 和静态内部类除了修饰符的区别之外 ...
- kotlin中使用Handler
kotlin中使用Handler jumpToPayHandler = Handler { var questionformModel = QuetionFormModel(2, spinner.te ...
- Kotlin中与Java不同的地方 需要注意
1. 在Kotlin中不会将基本数据类型的自动转型比如 scriptIntrinsicBlur.setRadius(25) //报错, 必须写成 25f 或者 调用.toFloat() 2.Kotli ...
- jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a=”<%=javaParam%>“ ...
- java中变量命名和引用变量的一个坑
这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点.
- Java多线程中变量的可见性
之所以写这篇博客, 是因为在csdn上看到一个帖子问的就是这个问题. 废话不多说, 我们先看看他的代码(为了减少代码量, 我将创建线程并启动的部分修改为使用方法引用). 1 2 3 4 5 6 7 8 ...
- JavaScript中变量声明有var和没var的区别
JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...
随机推荐
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- C语言 · 4_2找公倍数
问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 与上面的样例输入对应的输出.例: 代码如下: #include< ...
- 【组织级项目管理】P2 MSP P3O
组织级项目管理--有你,有我,有大家 在过去的2年,无论对于企业来讲,还是对于我们个人都有很多大脑的冲击,有几个词大家应该特别耳熟能详:转型,变革,敏捷,互联网+,组织的项目化管理等.就是这些让我们的 ...
- JavaScript 对象属性介绍
本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
- System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
在NHibernate数据库查询中出现了这个错误,由于是数据库是mysql的,当定义的字段为char(36)的时候就会出现这个错误. [解决方法] 将char(36) 改成varchar(40)就行了 ...
- c# Enumerable中Aggregate和Join的使用
参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...
- C#项目中文件的具体含义
1.Bin 目录 用来存放编译的结果,bin是二进制binary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin ...
- IOS开发基础知识--碎片51
1:https关闭证书跟域名的验证 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy]; securityPolic ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
MProc介绍 MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper. MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作( ...