package com.lyp.chaper01.vars
object VarDemo {
def main(args: Array[String]): Unit = {
var num1 = 22 //这时 num1 就是Int
//方式1 ,可以利用idea的提示来证明,给出提示
//方式2,使用isInstanceof[int]判断
println(num1.isInstanceOf[Int])
//修饰的变量不可变
var age = 10l //age 是可变的 反编译底层代码为 private int age = 101
age = 33 //OK
val num2 = 30 // private final int num2 = 30
// num2 =10 // val修饰的变量是不可以改变的 ,源代码 中是被final 修饰
/**
* scala 设计者为什么设计 var 和val
* 1.在实际编程,我们更多需求是获取/创建 一个对象之后,读取该对象的属性, 或者修改对象的属性值,但是我们很少去改变这个对象本身
* cat = new cat cat.age =5 cat = new cat ()
* 2. 因为val 没有线程安全问题,因此效率极高,scala设计者推荐使用val
* 3. 如果对象需要改变,则使用var
*
*/
val cat = new Cat
cat.age = 4 //ok
cat.name = "huahua"
//cat.weight=12 // 不可改变
}
}
class Cat{
var age : Int = 2
var name :String = "Tiger"
val weight :Double = 7.2
}
变量声明时需要初始化
程序中的 "+"的使用 数字是加法,字符串是拼接
1)scala 与Java有着相同的数据类型,在Scala中数据类行都是对象,也就是生活Scala没有java中的原生态类型
2)Scala 数据类型分为量大类 AnyVal (值类型) he AnyRef (引用类型),不管是AnyVal 还是AnyRef都是对象
1)在Scala中由一个跟类型Any 它是所有类的父类
2)在Scala中一切皆为对象,分为2大类,AnyVal (值类型) ,AnyRef (引用类型),他们都是Any子类
3)Null是Scala的特别类型,它只有一个null,值,它是boottomcalss,是所有anyRef类型的子类
4)Nothing 类型是所有类型的子类,在开发中通常可以将Nothing类型的值返回给任意变量或函数,这里抛出异常使用的多
5)在Scala中仍然遵守,低精度的值向高精度的值转换
| Byte [1] | 8bit,数值区间-128 至127 |
| Short[2] | 16bit |
| Int[4] | 32bit |
| Long[8] | 64bit |
| Float | 32bit |
| Double | 64bit |
| char | 16bit |
| String |
字符序列 |
| Boolean | true或false |
| Unit | 表示无值 和void等同 |
| Null | null |
| Nothing | Nothing类型在Scala的类层级的最低端,它是任何类的子类 |
| Any | Any是所有其他类的超类 |
| AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 |
| AnyVal | AnyVal类是Scal里数据类型的基类 |
最高位是符号位 0 为正
0 111 1111 2^7-1 =127
1111 1111 - (2^7)-1=-128
0000 0000 +0(正零)
1000 0000 -0 (负零)这个负零给了负数位 是128 而是不是127