一、数据类别二、字面上量三、操作符
一、数据类别
1.1类别全力支持
Scala 保有附注右图的数据类别,当中 Byte、Short、Int、Long 和 Char 类别泛称为有理数类别,有理数类别加之 Float 和 Double 泛称为值类别。Scala 值类别的值域覆盖范围和 Java 相关联类别的值域覆盖范围完全相同。
1.2表述表达式
Scala 的表达式分成三种,val 和 var,其差别如附注右图:
val :近似于 Java 中的 final 表达式,除非调用就无法被再次表达式;var :近似于 Java 中的非 final 表达式,在整座新闻稿周期性内 var 能被再次表达式;
scala> val a=1a: Int =1scala> a=2:8: error: reassignment to val //不容许再次表达式scala> var b=1b: Int =1scala> b=2b: Int =2
1.3类别推测
在上面的模拟中,并没新闻稿 a 是 Int 类别,但流程却是把 a 当作 Int 类别,这是 Scala 的类别推测。在绝大多数情况下,你都无须详述表达式的类别,流程会手动展开推测。假如你想隐式的新闻稿类别,能在表达式前面选定,如附注右图:
scala> val c:String=”hello scala”c: String = hello scala
1.4 Scala正则表达式
在 scala 配置文件中,假如没对输出的值选定表达式的表达式,则输出的值预设会表达式给 resX(当中 X 是两个从0 已经开始递减的有理数),res 是 result 的简写,那个表达式能在前面的句子中展开提及。
scala>5res0: Int =5scala> res0*6res1: Int =30scala> println(res1)30
二、字面上量
Scala 和 Java 字面上量在使用上很多相似,比如都使用 F 或 f 表示浮点型,都使用 L 或 l 表示 Long 类别。下文主要介绍两者差异部分。
scala>1.2res0: Double =1.2scala>1.2fres1: Float =1.2scala>1.4Fres2: Float =1.4scala>1res3: Int =1scala>1lres4: Long =1scala>1Lres5: Long =1
2.1有理数字面上量
Scala 全力支持10进制和16进制,但不全力支持八进制字面上量和以0 开头的有理数字面上量。
scala>012:1: error: Decimal integer literals may not have a leading zero.(Octal syntax is obsolete.)
2.2字符串字面上量
1.字符字面上量
字符字面上量由一对单引号和中间的任意 Unicode 字符组成。你能隐式的给出原字符、也能使用字符的 Unicode 码来表示,还能包含特殊的转义字符。
scala>\u0041res0: Char = Ascala>ares1: Char = ascala>\nres2: Char =
2.字符串字面上量
字符串字面上量由双引号包起来的字符组成。
scala>”hello world”res3: String = hello world
3.原生字符串
Scala 提供了”””…”””语法,通过三个双引号来表示原生字符串和多行字符串,使用该种方式,原生字符串中的特殊字符不会被转义。
scala>”hello \tool”res4: String = hello oolscala>”””hello \tool”””res5: String = hello \toolscala>”””hello world”””res6: String =helloworld
2.3符号字面上量
符号字面上量写法为:标识符,这里标识符能是任何字母
注意:具有完全相同 name 的符号字面上量一定指向同两个 Symbol 对象,不同 name 的符号字面上量一定指向不同的 Symbol 对象。
scala> val sym =ID008sym: Symbol =ID008scala> sym.nameres12: String = ID008
2.4插值表达式
Scala 全力支持插值表达式。
scala> val name=”xiaoming”name: String = xiaomingscala> println(s”My name is $name,Im ${2*9}.”)My name is xiaoming,Im 18.
三、操作符
Scala 和其他语言一样,全力支持绝大多数的操作操作符:
算术操作符(+,-,*,/,%)关系操作符(==,!=,>,<,>=,<=)逻辑操作符(&&,,!,&,)位操作符(~,&,,^,<<,>>,>>>)表达式操作符(=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,=)
以上操作符的基本上使用与 Java 类似,下文主要介绍差异部分和注意事项。
3.1操作符即方法
Scala 的面向对象比 Java 更加纯粹,在 Scala 中一切都是对象。所以对于1+2,实际上是调用了 Int 类中名为+ 的方法,所以1+2,也能写成1.+(2)。
scala>1+2res14: Int =3scala>1.+(2)res15: Int =3
Int 类中包含了多个重载的+ 方法,用于分别接收不同类别的参数。
3.2逻辑操作符
和其他语言一样,在 Scala 中&&,的执行是短路的,即假如左边的表达式能确定整座结果,右边的表达式就不会被执行,这满足绝大多数使用场景。但假如你需要在无论什么情况下,都执行右边的表达式,则能使用&或 代替。
3.3表达式操作符
在 Scala 中没 Java 中的++和 –操作符,假如你想要实现类似的操作,只能使用+=1,或者-=1。
scala> var a=1a: Int =1scala> a+=1scala> ares8: Int =2scala> a-=1scala> ares10: Int =1
3.4操作符优先级
操作符的优先级如附注右图:优先级由上至下,逐级递减。
在表格中某个字符的优先级越高,那么以那个字符打头的方法就保有更高的优先级。如+ 的优先级大于<,也就意味则+ 的优先级大于以<开头的<<,所以2<<2+2, 实际上等价于2<<(2+2):
scala>2<<2+2res0: Int =32scala>2<<(2+2)res1: Int =32
3.5对象相等性
假如想要判断两个对象是否相等,能使用==和 !=,这两个操作符能用于所有的对象,包括 null。
scala>1==2res2: Boolean = falsescala> List(1,2,3)==List(1,2,3)res3: Boolean = truescala>1==1.0res4: Boolean = truescala> List(1,2,3)==nullres5: Boolean = falsescala> null==nullres6: Boolean = true