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

原文标题: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约定)和更清晰的简洁的代码

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

时间: 2024-10-13 06:13:24

Kotlin中变量不同于Java: var 对val(KAD 02)的相关文章

Kotlin 变量和常量的声明(var和val)

Kotlin有着非常非常智能化的声明变量方式.叫做类型推断 声明变量要使用关键字var和val. var声明方式第一种(自动推断): var nub=1231://自动定义整数型 使用分号 var ch="这是一个字符串" //自动定义字符串 不使用分号 同样,是Kotlin自己判断的数据类型. 当我们自动定义一个类型之后,这个类型就会固定下来这个类型. 正如我们下面的代码. 定义一个字符串之后在赋值一个数字就会报错 fun main(agrs : Array<String>

在Kotlin中使用注释处理Android框架 kapt

本教程介绍如何在 Kotlin 中使用依赖于注释处理的流行的 Android 框架和库. 在日常 Android 开发中,流行着数以千计的框架帮助我们提升开发效率. 使用 Kotlin 开发时仍然可以沿用这些框架,而且和使用 Java 同样简单. 本章教程将提供相关示例并重点介绍配置的差异. 教程以 Dagger. Butterknife. Data Binding. Auto-parcel 以及 DBFlow 为例(其它框架配置基本类似). 以上框架均基于注解处理方式工作:通过对代码注解自动生

jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?

在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a=”<%=javaParam%>“;注意要将引号”"加上: js变量给java稍微复杂点,一般是在表单中用一个的隐藏表单元素,然后在脚本中将js变量值赋给它: var jsParamValue=’aaaa’;form1.jsParam.value=jsParamValue; 然后就可以request.getPrameter(“jsP

java中变量命名和引用变量的一个坑

这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点. 如果你对命名规则很熟啦,就直接看第二个内容吧.(上边的图稍微有点顺序紊乱啊) 一.java中变量的命名规则 大多数语言的命名规则是相似的,只有一些微小的差别. 变量的第一个位置,可以是字母,下划线(_),美元符($) (这个在c/c++,python中是不行的)(注意:不能是数字哦,一想就知道啦为什仫) 其他的位置可以是数字,字母,下划线 不能使用java中的关键字 j

java中变量运算细节 (2)

/* 目的:测试变量的运算方式 结果:byte a, b, c; a = b+c; 或者 a = b+10 形如这种形式的算式, 等式的右边的运算结果默认的都是int型的!因为等式右边有变量, 编译器无法确定变量的内容 ,因为它是变量!所以相加之后得到的int再默认强制转换成byte可能会损失精度. 而形如 a=4+5:这种常量的赋值,虽然 4 和 5 都默认的是int, 但都是常量,它们的值是确定的!所以如果 4+5的值超过了 byte的最大值的范围, 那就会编译出错!(也就是等式右边都是常量

Java基础---Java中变量使用规则(六)

Java中变量的使用规则 不得不接受的变量小脾气: 1.Java 中的变量需要先声明后使用 2.变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 3.变量中每次只能赋一个值,但可以修改多次 4.main 方法中定义的变量必须先赋值,然后才能输出 关于 String :表示变量中存储的数据的类型为字符串,后面小节中会详细讲到,小小期待吧~~ 代码: public class HelloWorld{    public static void main(String[] args) { 

JavaScript中变量声明有var和没var的区别

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ ... })(): 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区

Kotlin中与Java不同的地方 需要注意

1. 在Kotlin中不会将基本数据类型的自动转型比如 scriptIntrinsicBlur.setRadius(25) //报错, 必须写成 25f 或者 调用.toFloat() 原文地址:https://www.cnblogs.com/gloryhope/p/10441827.html

浅谈Kotlin中的函数

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方宣布 kotlin first 的存在,去翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin.Kotlin的务实作风,提供了很多特性帮助开发者减少冗余代码的编写,可以提高效率,也能减少异常. 本文简单谈下Kotlin中的函数,包括表达式函数体,命名参数,默认参数,顶层函数