Scala语言类型(同java)
静态,强,类型推断,
弱类型:(javascripte) > "1"+2 '12' 强类型:(java,scala,python) >>> "1"+2 TypeError: cannot concatenate 'str' and 'int' objects 动态类型:(python,javascripte) >>> a = 1 >>> type(a) <type 'int'> 静态类型:(java,scala) Prelude> let a = "123" :: Int <interactive>:2:9: Couldn't match expected type `Int' with actual type `[Char]' In an equation for `a': a = "123" :: Int 动态类型=>运行时检查。静态类型=>编译期检查
变量
- 语法声明
// var | val 变量名 :变量类型 = 变量值 // 变量的类型如果能够通过变量值推断出来,那么可以省略类型声明 var username : String = "AsianHarden" or var username = "AsianHarden"
- 变量初始化
// 显式类型: 你得说,不然编译器不知道 var username // Error or val username = "AsianHarden" // OK println(username)
可变变量
// 值可以改变的变量,称之为可变变量,但是变量类型无法发生改变, Scala中可变变量使用关键字var进行声明 var username : String = "AsianHarden"
不可变变量
// 值一旦初始化后无法改变的变量,称之为不可变变量。Scala中不可变变量使用关键字val进行声明, 类似于Java语言中的final关键字 val username : String = "AsianHarden"
标识符
Scala 可以使用两种形式的标志符,字符数字和符号。 字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"$"在 Scala 中也看作为字母。然而以"$"开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用"$"开始的标识符,以免造成冲突。 Scala 的命名规范采用和 Java 类似的 camel 命名规范,首字符小写,比如 toString。类名的首字符还是使用大写。此外也应该避免使用以下划线结尾的标志符以避免冲突。 Scala 内部实现时会使用转义的标志符,比如:-> 使用 $colon$minus$greater 来表示这个符号。
类型转换
- 隐式转换(自动类型转化)
子类可以自动转换为超;向上转是隐式的 val c : Char = 'A' + 1 println(c)
- 强制类型转化
// 基本上Scala的AnyVal类型之间都提供了相应转换的方法。,常量计算在编译时就完成
var a : Int = 10
Var b : Byte = a.toByte
//变量在执行时候,提升数据类型到int ,但是需要char
val num=10;
val ch:Char = 'A'+num
println(ch)
Scala的空
1.Null 和 null Null 是Scala的一个特征(Trait),我们不能创建他的实例,但从Scala语言层面上来说,null是Null的唯一对象。如果你写了一个带有Null作为参数的对象,那么你传入的参数只能是null,或者指向Null的引用。但无法获取null的类。
对比Java的空
Java中的null值 null是关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL 就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。 null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型。 null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。否则,编译器将会报错。 理解:可以认为null是指,程序在栈内存中存在该变量,但其不指向的堆内存或指向的堆内存找不到相应的地址