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 ...
随机推荐
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- .net点选验证码实现思路分享
哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...
- Fis3的前端模块化之路[基础篇]
Fis3版本:v3.4.22 fis3是一个构建工具 解决前端开发中自动化工具.性能优化.模块化框架.开发规范.代码部署.开发流程等问题. 安装 npm install -g fis3 运行 fis3 ...
- 问题记录:EntityFramework 一对一关系映射
EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...
- Git分布式版本控制教程
Git分布式版本控制Git 安装配置Linux&Unix平台 Debian/Ubuntu $ apt-get install git Fedora $ ) $ dnf and later) G ...
- VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容
VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容 一般来说,在对虚拟机里的Ubuntu下的磁盘进行扩容时,都是添加新的分区,而并不是对其系统所在分区进行扩容,如在此链接中http ...
- 谁偷了我的热更新?Mono,JIT,iOS
前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...
- 从零开始,DIY一个jQuery(1)
从本篇开始会陪大家一起从零开始走一遍 jQuery 的奇妙旅途,在整个系列的实践中,我们会把 jQuery 的主要功能模块都了解和实现一遍. 这会是一段很长的历程,但也会很有意思 —— 作为前端领域的 ...
- 【腾讯Bugly干货分享】微信热补丁Tinker的实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e Dev Club 是一个交流移动 ...
- JNI 备注
本文记录一个基础的JNI例子及过程中遇到的问题解决. 1.定义一个JAVA类如下: package jnidemo01; public class JniHello { public native v ...