scala語言與java的區別

  1. scala支持關聯映射,如能夠用(key -> value)表示一個鍵值對java

  2. scala中的全部類型都是對象,包括基本數據類型編程

  3. scala中的case語句用來判斷接收的消息,比java中的switch...case...更專一數組

    receive{    case msg => action()    }併發

  4. scala行動類實現了線程之上的併發抽象,經過發送消息相互通訊,每一個行動類都自動維護一個消息隊列,而且實現發送消息和接收消息的基本操做。app

    receriver ! msg函數式編程

  5. scala是靜態類型的,也即在編譯以前就須要肯定參數的類型,與C++的參數化類型類似函數

  6. scala包含兩種類型的變量,val變量至關於java中的const,var則是常規變量spa

  7. scala中的基本數據類型,來源於Java中對相應數據類型的類封裝,String類型則相同線程

  8. scala具備類型推斷功能,在可由上下文推斷的狀況下,能夠省略類型說明,如:val x = 4scala

  9. scala經過def關鍵字定義函數,在缺省顯式return語句的狀況下,返回函數最後計算獲得的值

  10. scala採用println直接輸出到標準輸出,而不用System.out.println

  11. scala中的數組索引是args(0),而非java中的args[0]

  12. scala數組Array包含方法foreach(action),其中action是一個傳入的函數,例如:x => println(x)

  13. scala提供指令式:for(arg <- args)    println(arg)

  14. scala中的全部操做符都是方法的調用,例如:1+2,等效於(1).+(2)

    0 to 5,等效於(0).to(5),x(1)="scala",等效於(x).update(1,"scala"),x(1)等效於(x).apply(1)

  15. scala經過定義伴生對象,分離靜態成員,相似於java中的static關鍵字

  16. scala Array數組中全部對象都具備相同類型,實例化後數組長度不能再改變,可是數組元素值能夠改變

    List數組中的元素值則不可改變,List有"::"實現疊加功能,操做符會建立一個新的List,List不支持append操做

  17. scala包含新的容器對象Tuple,元組能夠包含多個不一樣類型的對象,例如:val tp = (1,2,"scala"),中tp就是一個Tuple[Int,Int,String]對象,tp._1表示取第一個元素

  18. scala中Set和Map類型有可變和不可變兩種實現方式,分別保存在不一樣的包中

  19. scala沒有"++"操做符

  20. scala提供trait關鍵字,描述對象的特質,相似於java中的接口interface

  21. scala提倡函數式編程風格,減小var變量的使用,這樣能夠獲得簡潔可讀性更強的代碼

  22. scala從文件中讀取數據,Source.fromFile("filename").getLines()返回一個Iterator[String]對象

  23.  scala中的"=="操做符比較的是值的相等性,提供函數eq、ne比較引用的相等性

  24. 每一個類都繼承自Any,scala中「==」和equals相同,能夠經過重寫equals方法改變「==」的意義。類Any有兩個子類,AnyVal和AnyRef。AnyVal是scala中內建值類的父類,Byte、Short、Char、Int、Long、Float、Double、Boolean、Unit,前面8個和java中的基本類型相對應。Unit大約至關於Java的Void類型,只有一個實例,寫成()。在java平臺上,AnyRef實際上就是java.lang.Object的別名。

  25. scala類和java類的不一樣還在於其繼承了一個名爲ScalaObject的記號特質,目前爲止ScalaObject只包含一個方法名爲$tag,在內部使用以加速模式匹配。

  26. Null類是null引用對象的類型,它是每一個引用類的子類,Null不兼容值類型,不能把null賦給整數變量。Nothing類型在scala類層級的最底端,它是任何其餘類型的子類型,然而根本沒有這個類型的任何值,Nothing的一個用處是標明程序的不正常終止。

相關文章
相關標籤/搜索