1 變量
變量是一種使用方便的占位符唧瘾,用于引用計算機內(nèi)存地址喇勋,變量創(chuàng)建后會占用一定的內(nèi)存空間缨该。基于變量的數(shù)據(jù)類型川背,操作系統(tǒng)會進行內(nèi)存分配并且決定什么將被儲存在保留內(nèi)存中贰拿。因此,通過給變量分配不同的數(shù)據(jù)類型熄云,你可以在這些變量中存儲整數(shù)膨更,小數(shù)或者字母。
1.1 變量聲明
在學習如何聲明變量與常量之前缴允,我們先來了解一些變量與常量荚守。
- 變量: 在程序運行過程中其值可能發(fā)生改變的量叫做變量。如:時間,年齡健蕊。
- 常量 :在程序運行過程中其值不會發(fā)生變化的量叫做常量菱阵。如:數(shù)值 3,字符'A'缩功。在 Scala 中晴及,使用關鍵詞 "var" 聲明變量,使用關鍵詞 "val" 聲明常量嫡锌。
聲明變量實例如下:
var myVar : String = "Foo"
var myVar : String = "Too修改"
以上定義了變量 myVar虑稼,我們可以修改它。
聲明常量實例如下:
val myVal : String = "Foo"
以上定義了常量 myVal势木,它是不能修改的蛛倦。如果程序嘗試修改常量 myVal 的值,程序?qū)诰幾g時報錯啦桌。
1.2 變量類型推斷
在 Scala 中聲明變量和常量不一定要指明數(shù)據(jù)類型溯壶,在沒有指明數(shù)據(jù)類型的情況下,其數(shù)據(jù)類型是通過變量或常量的初始值推斷出來的甫男。所以且改,如果在沒有指明數(shù)據(jù)類型的情況下聲明變量或常量必須要給出其初始值,否則將會報錯板驳。
var myVar = 10;
val myVal = "Hello, Scala!";
以上實例中又跛,myVar 會被推斷為 Int 類型,myVal 會被推斷為 String 類型若治。
1.3 多個變量聲明
Scala 支持多個變量的聲明:
val xmax, ymax = 100 // xmax, ymax都聲明為100
如果方法返回值是元組慨蓝,我們可以使用 val 來聲明一個元組:
val pa = (40,"Foo")
pa: (Int, String) = (40,Foo)
2 運算符
一個運算符是一個符號,用于告訴編譯器來執(zhí)行指定的數(shù)學運算和邏輯運算端幼。
Scala 含有豐富的內(nèi)置運算符礼烈,包括以下幾種類型:
2.1算術運算符
實例:
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
var c = 25;
var d = 25;
println("a + b = " + (a + b) );
println("a - b = " + (a - b) );
println("a * b = " + (a * b) );
println("b / a = " + (b / a) );
println("b % a = " + (b % a) );
println("c % a = " + (c % a) );
}
}
結(jié)果:
$ scalac Test.scala
$ scala Test
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
2.2 關系運算符
實例:
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
println("a == b = " + (a == b) );
println("a != b = " + (a != b) );
println("a > b = " + (a > b) );
println("a < b = " + (a < b) );
println("b >= a = " + (b >= a) );
println("b <= a = " + (b <= a) );
}
}
結(jié)果:
$ scalac Test.scala
$ scala Test
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
2.3 邏輯運算符
object Test {
def main(args: Array[String]) {
var a = true;
var b = false;
println("a && b = " + (a&&b) );
println("a || b = " + (a||b) );
println("!(a && b) = " + !(a && b) );
}
}
結(jié)果:
$ scalac Test.scala
$ scala Test
a && b = false
a || b = true
!(a && b) = true
2.4 位運算符
數(shù)據(jù)在計算機中存儲是以0和1二進制存儲的并且是以補碼的形式存儲的。
原碼静暂、反碼以及補碼都是有符號的济丘,其中最高位存放符號位,0 表示正數(shù)洽蛀,1 則表示負數(shù)摹迷。
- 原碼:最高位表示正負,其余位表示數(shù)值郊供。
+1 = [0000 0001]原峡碉,-1 = [1000 0001]原
- 反碼:正數(shù)的反碼和原碼相同;負數(shù)的反碼是在原碼的基礎上驮审,符號位不變鲫寄,其余位按位取反吉执。
+1 = [0000 0001]反,-1 = [1111 1110]反
- 補碼:正數(shù)的補碼和原碼也相同地来;負數(shù)的補碼是在反碼的基礎上加 1戳玫。
+1 = [0000 0001]補,-1 = [1111 1111]補
特殊規(guī)則:一個數(shù)被同一個數(shù)異或2次等于他本身 10 ^ 20^20 = 10
- &:相同為1未斑,不同為0
- | :有一個1就位1咕宿,否則為0
- `^:相同為0,不同為1
- ~:取反0轉(zhuǎn)1,1轉(zhuǎn)0
實例:
A = 0011 1100
B = 0000 1101
-------位運算----------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
結(jié)果:
A = 0011 1100
B = 0000 1101
-------位運算----------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
2.5 賦值運算符
實例:
object Test {
def main(args: Array[String]) {
var a = 60; /* 60 = 0011 1100 */
var b = 13; /* 13 = 0000 1101 */
var c = 0;
c = a & b; /* 12 = 0000 1100 */
println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
println("a ^ b = " + c );
c = ~a; /* -61 = 1100 0011 */
println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
println("a >>> 2 = " + c );
}
}
結(jié)果:
$ scalac Test.scala
$ scala Test
c = a + b = 30
c += a = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= a = 0
c &= 2 = 0
c ^= a = 10
c |= a = 10