基本类型和操作
========================
类型说明,与java一致
值类型 范围
Byte 8位有符号补码整数(-27~27-1)
Short 16位有符号补码整数(-215~215-1)
Int 32位有符号补码整数(-231~231-1)
Long 64位有符号补码整数(-263~263-1)
Char 16位无符号Unicode字符(0~216-1)
String 字符序列
Float 32位IEEE754单精度浮点数
Double 64位IEEE754单精度浮点数
Boolean true或false
特殊字符:
文本 含义
\n 换行(\u000A)
\b 回退(\u0008)
\t 制表符(\u0009)
\f 换页(\u000C)
\r 回车(\u000D)
\" 双引号(\u0022)
\‘ 单引号(\u0027)
\\ 反斜杠(\u005C)
=======================================
符号文本
符号文本被写成‘<标识符>,这里<标识符>可以是任何字母或数字的标识符。
如: var a = ‘cymbal
============================================
操作符和方法
任何方法都可以是操作符
与中缀操作符操作符带后两个操作数,一个在左一个在右相反,前缀和后缀操作符都是一元:unary的:它们仅带一个操作数
可以当作前缀操作符用的标识符只有+,-,!和~
后缀操作符是不用点或括号调用的不带任何参数的方法
Scala里,你可以舍弃方法调用的空括号。例外就是如果方法带有副作用就加上括号,如println(),不过如果方法没有副作用就可以去掉括号,如String上调用的toLowerCase:
================================
数学运算
你可以通过中缀操作符,加号(+),减号(-),乘号(*),除号(/)和余数(%),在任何数类型上调用数学方法 , scala中的基础运算与java一致
scala> 1.2 + 2.3
res6: Double = 3.5
scala> 3 - 1
res7: Int = 2
scala> ‘b‘ - ‘a‘
res8: Int = 1
scala> 2L * 3L
res9: Long = 6
scala> 11 / 4
res10: Int = 2
scala> 11 % 4
res11: Int = 3
scala> 11.0f / 4.0f
res12: Float = 2.75
scala> 11.0 % 4.0
res13: Double = 3.0
========================================
关系和逻辑操作
你可以用关系方法:大于(>),小于(<),大于等于(>=)和小于等于(<=)比较数类型,像等号操作符那样,产生一个Boolean结果。另外,你可以使用一元操作符!(unary_!方法)改变Boolean值
scala> 1 > 2
res16: Boolean = false
scala> 1 < 2
res17: Boolean = true
scala> 1.0 <= 1.0
res18: Boolean = true
scala> 3.5f >= 3.6f
res19: Boolean = false
scala> ‘a‘ >= ‘A‘
res20: Boolean = true
scala> val thisIsBoring = !true
thisIsBoring: Boolean = false
scala> !thisIsBoring
res21: Boolean = true
scala> val toBe = true
toBe: Boolean = true
scala> val question = toBe || !toBe
question: Boolean = true
scala> val paradox = toBe && !toBe
paradox: Boolean = false
===================================
对象相等性
scala> List(1, 2, 3) == List(1, 2, 3)
res27: Boolean = true
scala> List(1, 2, 3) == List(4, 5, 6)
res28: Boolean = false
scala> List(1, 2, 3) == null
res31: Boolean = false
scala> null == List(1, 2, 3)
res32: Boolean = false
===== ===== ====
scala> ("he" + "llo") == "hello"
res33: Boolean = true
=== 比较2个不同的对象
scala> 1 == 1.0
res29: Boolean = true
基本类型只能用==,!=, >,< 进行比较, 但是引用类型是用eq,ne,== , !=进行比较:
Scala的==与Java的有何差别 Java里的既可以比较原始类型也可以比较参考类型。对于原始类型,Java的==比较值的相等性,如Scala。然而对于参考类型,Java的==比较了参考相等性:reference equality,也就是说这两个变量是否都指向于JVM堆里的同一个对象。Scala也提供了这种机制,名字是eq。不过,eq和它的反义词,ne,仅仅应用于可以直接映射到Java的对象。
========================================
scala中的优先级和关联性。
(所有其他的特殊字符)
* / %
+ -
:
= !
< >
&
^
|
======================================
富包装器
8 到目前为止,你应该能指出给出的这段代码,Scala编译器会调用成(bills.!*&^%~(code)).!()。
表格5.4 一些富操作
代码 结果
0 max 5 5
0 min 5 0
-2.7 abs 2.7
-2.7 round -3L
1.5 isInfinity false
(1.0 / 0) isInfinity true
4 to 6 Range(4, 5, 6)
"bob" capitalize "Bob"
"robert" drop 2 "bert"
富包装类
基本类型 富包装
Byte scala.runtime.RichByte
Short scala.runtime.RichShort
Int scala.runtime.RichInt
Long scala.runtime.RichLong
Char scala.runtime.RichChar
String scala.runtime.RichString
Float scala.runtime.RichFloat
Double scala.runtime.RichDouble
Boolean scala.runtime.RichBoolean