一运算符即方法
1、p
运算符与.op
方法调用是等价的,op
表示运算符:+
、-
、*
、/
……
二方法即运算符
1、str.indexOf('c')
与 str indexOf 'c'
是等价的
三多参方法
1、str.substring(2, 4)
与str substring (2, 4)
是等价的。
四Scala与Java运算符比较
1、Scala和Java运算符基本相同,不同之处在于比较运算符
2、Java中,如果是基本数据类型,==与!= 比较的是值;如果是复杂数据类型,比较的是对象的地址,如果不是想比较地址而是想比较真正的内容,则需要使用 equals 方法。
3、Scala中,如果是基本数据类型,==与!= 比较的是值;如果是复杂数据类型,会隐含地调用equals进行比较,这也就意味着 Scala中不存在Java中经典的equals问题。
五运算符种类
1、中缀运算符(Infix Operator)
运算符符在两个操作数之间 2 + 3 等同于 (2).+(3)
2、前缀运算符(Prefix Operator)运算符在唯一的操作数之前 :-
1、+
3、 ~
0xFF、!
false。
2(1)、-1
等同于1.unary_-
,前缀运算符如同中缀运算符一样,也是方法调用的另一种方式,不同的是,方法名要在符号前加上前缀unary_
。
2(2)能作为前缀运算符的运算符只有+、-、!、~
四种。如果你自己定义了unary_!
方法就可以使用!
前缀运算符来调用方法了,但是即使你定义了unary_*
,*
也不能用来调用该方法,因为*
不是四种可用的前缀运算符之一.。
3、后缀运算符(Postfix Operator)运算符在唯一的操作数之后 str toUpperCase 等同于 str.toUpperCase(),后缀运算符不用点或括号调用无参方法。在Scala里,方法调用的空括号可以省略,但是如果去掉括号可能造成副作用就带上括号。
六运算符优先级
1、由于Scala并没有真正的运算符,运算符其实是方法的一种形式,所以此处运算符的优先级,其实就是指方法的优先级。在Scala中方法的执行是有优先级的区别的,这也是为了解决传统运算符优先级问题。
2、运算优先级表