在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Scala/ Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
包對(duì)象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達(dá)式
類和對(duì)象 (三)
操作基本數(shù)據(jù)類型
for 表達(dá)式
組合和繼承–重載成員函數(shù)和方法
類和對(duì)象 (二)
組合和繼承–定義 factory 對(duì)象
組合和繼承–多態(tài)和動(dòng)態(tài)綁定
Trait 的基本概念
if 表達(dá)式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問控制修飾符
Trait 示例–Rectangular 對(duì)象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無參數(shù)方法
類和對(duì)象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
try 表達(dá)式處理異常
選擇瘦接口還是胖接口設(shè)計(jì)?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問控制修飾符添加作用域
Scala 的類層次關(guān)系
類和對(duì)象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進(jìn)一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實(shí)現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對(duì)象 (四)
函數(shù)–尾遞歸
沒有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復(fù)
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴(kuò)展類
函數(shù)–部分應(yīng)用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來實(shí)現(xiàn)可疊加的修改操作

Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法

Scala 的基本數(shù)據(jù)類型是如何實(shí)現(xiàn)的?實(shí)際上,Scala 以與 Java 同樣的方式存儲(chǔ)整數(shù):把它當(dāng)作 32 位的字類型。這對(duì)于有效使用 JVM 平臺(tái)和與 Java 庫的互操作性方面來說都很重要。標(biāo)準(zhǔn)的操作如加法或乘法都被實(shí)現(xiàn)為數(shù)據(jù)類型基本運(yùn)算操作。然而,當(dāng)整數(shù)需要被當(dāng)作(Java)對(duì)象看待的時(shí)候,Scala 使用了“備份”類 java.lang.Integer。如在整數(shù)上調(diào)用 toString 方法或者把整數(shù)賦值給 Any 類型的變量時(shí),就會(huì)這么做,需要的時(shí)候,Int 類型的整數(shù)能自動(dòng)轉(zhuǎn)換為 java.lang.Integer 類型的“裝箱整數(shù)(boxed integer)”。

這些聽上去和 Java 的 box 操作很像,實(shí)際上它們也很像,但這里有一個(gè)重要的差異,Scala 使用 box 操作比在 Java 中要少的多:

// Java代碼 
boolean isEqual(int x,int y) { 
  return x == y; 
} 
System.out.println(isEqual(421,421));

你當(dāng)然會(huì)得到 true?,F(xiàn)在,把 isEqual 的參數(shù)類型變?yōu)閖 ava.lang.Integer(或 Object,結(jié)果都一樣):

// Java代碼 
boolean isEqual(Integer x, Integery) { 
  return x == y; 
} 
System.out.println(isEqual(421,421));

你會(huì)發(fā)現(xiàn)你得到了 false!原因是數(shù) 421 使用”box”操作了兩次,由此參數(shù) x 和 y 是兩個(gè)不同的對(duì)象,因?yàn)樵谝妙愋蜕?=表示引用相等,而 Intege r是引用類型,所以結(jié)果是 false。這是展示了 Java 不是純面向?qū)ο笳Z言的一個(gè)方面。我們能清楚觀察到基本數(shù)據(jù)值類型和引用類型之間的差別。

現(xiàn)在在 Scala 里嘗試同樣的實(shí)驗(yàn):

scala> def isEqual(x:Int,y:Int) = x == y
isEqual: (x: Int, y: Int)Boolean
scala> isEqual(421,421)
res0: Boolean = true
scala> def isEqual(x:Any,y:Any) = x == y
isEqual: (x: Any, y: Any)Boolean
scala> isEqual(421,421)
res1: Boolean = true

Scala 的 == 設(shè)計(jì)出自動(dòng)適應(yīng)變量類型的操作,對(duì)值類型來說,就是自然的(數(shù)學(xué)或布爾)相等。對(duì)于引用類型,==被視為繼承自 Objec t的 equals 方法的別名。比如對(duì)于字符串比較:

scala> val x = "abcd".substring(2)
x: String = cd
scala> val y = "abcd".substring(2)
y: String = cd
scala> x==y
res0: Boolean = true

而在 Java 里,x 與 y 的比較結(jié)果將是 false。程序員在這種情況應(yīng)該用 equals,不過它容易被忘記。

然而,有些情況你需要使用引用相等代替用戶定義的相等。例如,某些時(shí)候效率是首要因素,你想要把某些類哈希合并: hash cons 然后通過引用相等比較它們的實(shí)例,為這種情況,類 AnyRef 定義了附加的 eq 方法,它不能被重載并且實(shí)現(xiàn)為引用相等(也就是說,它表現(xiàn)得就像 Java 里對(duì)于引用類型的==那樣)。同樣也有一個(gè) eq 的反義詞,被稱為 ne。例如:

scala> val x =new String("abc")
x: String = abc
scala> val y = new String("abc")
y: String = abc
scala> x == y
res0: Boolean = true
scala> x eq y
res1: Boolean = false
scala> x ne y
res2: Boolean = true