diff --git a/notes/Scala基本数据类型.md b/notes/Scala基本数据类型和运算符.md similarity index 60% rename from notes/Scala基本数据类型.md rename to notes/Scala基本数据类型和运算符.md index 3a2967c..8145c54 100644 --- a/notes/Scala基本数据类型.md +++ b/notes/Scala基本数据类型和运算符.md @@ -1,4 +1,19 @@ -# Scala基本数据类型 +# Scala基本数据类型和运算符 + + + ## 一、数据类型 @@ -23,7 +38,7 @@ Scala 拥有下表所示的数据类型,其中Byte、Short、Int、Long和Char ## 二、字面量 -Scala和Java字面量在使用上很多相似,比如都使用F或f表示浮点型,都使用L或l表示Long类型。故下文主要介绍两者差异部分。 +Scala和Java字面量在使用上很多相似,比如都使用F或f表示浮点型,都使用L或l表示Long类型。下文主要介绍两者差异部分。 ```scala scala> 1.2 @@ -134,11 +149,11 @@ Scala和其他语言一样,支持大多数的操作运算符: - 位运算符(~,&,|,^,<<,>>,>>>) - 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=) -以上操作符的基本使用与其他语言类似,以下主要介绍差异部分和注意事项。 +以上操作符的基本使用与Java类似,下文主要介绍差异部分和注意事项。 ### 3.1 运算符即方法 -Scala的面向对象比Java更加纯粹,在Scala中一切都是对象。对于`1+2`,实际上是调用了Int类中名为`+`的方法,所以1+2,也可以写成`1.+(2)`。 +Scala的面向对象比Java更加纯粹,在Scala中一切都是对象。所以对于`1+2`,实际上是调用了Int类中名为`+`的方法,所以1+2,也可以写成`1.+(2)`。 ```scala scala> 1+2 @@ -150,7 +165,51 @@ res15: Int = 3 Int类中包含了多个重载的`+`方法,用于分别接收不同类型的参数。 -![scala-int+](D:\BigData-Notes\pictures\scala-int+.png) +
### 3.2 运算符优先级 +操作符的优先级如下:优先级由上至下,逐级递减。 + +
+ +在表格中某个字符的优先级越高,那么以这个字符打头的方法就拥有更高的优先级。如`+`的优先级大于`<`,也就意味则`+`的优先级大于以`<`开头的`<<`,所以`2<<2+2` , 实际上等价于`2<<(2+2)` : + +```scala +scala> 2<<2+2 +res0: Int = 32 + +scala> 2<<(2+2) +res1: Int = 32 +``` + +### 3.3 逻辑运算符 + +和其他语言一样,在Scala中&&,||的执行是短路的,即如果左边的表达式能确定整个结果,右边的表达式就不会被执行,这满足大多数使用场景。但是如果你需要在无论什么情况下,都执行右边的表达式,则可以使用&或|代替。 + +### 3.4 对象相等性 + +如果想要判断两个对象是否相等,可以使用`==`和`!=`,这两个操作符可以用于所有的对象,包括null。 + +```scala +scala> 1==2 +res2: Boolean = false + +scala> List(1,2,3)==List(1,2,3) +res3: Boolean = true + +scala> 1==1.0 +res4: Boolean = true + +scala> List(1,2,3)==null +res5: Boolean = false + +scala> null==null +res6: Boolean = true +``` + + + +## 参考资料 + +1. Martin Odersky(著),高宇翔(译) . Scala编程(第3版)[M] . 电子工业出版社 . 2018-1-1 \ No newline at end of file diff --git a/pictures/scala-操作符优先级.png b/pictures/scala-操作符优先级.png new file mode 100644 index 0000000..9f7dca8 Binary files /dev/null and b/pictures/scala-操作符优先级.png differ