015_Scala变量的注意事项.
变量声明基本语法
var|val 变量名[:变量类型] = 变量值
注意事项
- 声明变量时,类型可以省略(编译器自动推导,即类型推导)
- 类型确定后,就不能修改了,说明Scala是强数据类型语言.
- 在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可变,val修饰的变量不可改
- val修饰的变量在编译后,等同于加上final,通过反编译看下底层代码.
package com.atguigu.chapter01.vars
/**
* ClassName: ${CLASS_NAME} <br/>
* Description: ${CLASS_NAME} <br/>
* Date: 2021-03-23 8:43 <br/>
* @project scala
* @package com.atguigu.chapter01.vars
* @version 产品版本信息 2021年03月23日8:43分 yufengming(yufengming@travelsky.com) 新建<br/>
* <p>
* 修改记录
*
*/
object VarDemo02 {
def main(args: Array[String]): Unit = {
// 类型推导
var num = 10// 这个时候num就是int类型
// 如何证明
// 方式1,可以利用 idea的提示
// 方式2,isInstanceOf
println(num.isInstanceOf[Int])
//3
val num2 = 30
// num2 = 40 ///报错
// val 修饰的变量是不可以改变的
val dog = new Dog
// dog = new Dog // 报错 不能覆盖新对象
// 但是属性可以改
dog.age = 90
dog.name = "小花"
// 这样我即可也改变你的属性,又不可以改变整体对象
// 这样就可以做底层的优化
/// Java里面么有这个
// 有个大神这么说的: 如果我早知道要是有这个Scala ,我都不新发明语言了
}
}
class Dog {
// 声明一个age属性,给了一个默认值
var age: Int = 0 // 默认值0
// 声明名字
var name: String = "" //
}
Scala的设计者,为什么设计了 2 种不同的 var 和 val
- 在实际编程中,我么更多的需求是获取/创建一个对象后,读取该对象的属性,或者是修改对象的属性值
- 但是我们很少去改变这个对象本身
- 这时我们就可以使用它了,
- 因为 val 没有线程安全问题,因此效率高,scala的设计者推荐我们使用val
- 如果对象需要变化,则使用var
如果你使用val修饰的变量,等同于加上final了
package com.atguigu.chapter01.vars
/**
* ClassName: ${CLASS_NAME} <br/>
* Description: ${CLASS_NAME} <br/>
* Date: 2021-03-23 9:06 <br/>
* <p>
* 修改记录
*
*/
object VarDemo03 {
var name = "hello"
val age = 100
def main(args: Array[String]): Unit = {
println("ok")
}
}
这样在反编译的时候就可以看到
val 的有final