Scala變量和常用數據類型

一、 聲明值和變量

Scala聲明變量有兩種方式,一個用val,一個用var。

聲明方式:val / var 變量名 : 變量類型 = 變量值

val定義的值是不可變的,它不是一個常量,是不可變量,或稱之為只讀變量。

val示例:

scala> val a1 = 10
scala> a1 = 20(此處會報錯,因為val不允許初始化后再次修改a1變量的引用)12

var示例:

scala> var a2 = 10
scala> a2 = 2012

1、scala默認為匿名變量分配val
2、val定義的變量雖然不能改變其引用的內存地址,但是可以改變其引用的對象的內部的其他屬性值。
3、為了減少可變性引起的bug,應該盡可能地使用不可變變量。變量類型可以省略,解析器會根據值進行推斷。val和var聲明變量時都必須初始化。

二、常用數據類型

常用類型介紹

同Java一樣,Scala也有8種基本數據類型:Byte、Char、Short、Int、Long、Float、Double以及Boolean。

類型介紹
Booleantrue 或者 false
Byte8位, 有符號
Short16位, 有符號
Int32位, 有符號
Long64位, 有符號
Char16位, 無符號
Float32位, 單精度浮點數
Double64位, 雙精度浮點數
String由Char數組組成

與Java中的數據類型不同,Scala并不區分基本類型和引用類型,所以這些類型都是對象,可以調用相對應的方法。

其中,String直接使用的是java.lang.String. 不過,由于String實際是一系列Char的不可變的集合,Scala中大部分針對集合的操作,都可以用于String,具體來說,String的這些方法存在于類scala.collection.immutable.StringOps中。

由于String在需要時能隱式轉換為StringOps,因此不需要任何額外的轉換,String就可以使用這些方法。

每一種數據類型都有對應的Rich* 類型,如RichInt、RichChar等,為基本類型提供了更多的有用操作。

三、Scala類型層次結構

java的除了原始類型的所有類都有一個默認的父類Object,那么scala的統一父類是什么呢?

在Scala中,所有的值都有類型,包括數值和函數。

這里寫圖片描述

1、Any、AnyVal、AnyFloat

Any是所有類型的超類型,也稱為頂級類 型。它定義了一些通用的方法如equalshashCodetoStringAny有兩個直接子類:AnyValAnyRef

AnyVal代表值類型。有9個預定義的非空的值類型分別是:DoubleFloatLongIntShortByteCharUnitBooleanUnit是不帶任何意義的值類型,它僅有一個實例可以像這樣聲明:()。所有的函數必須有返回,所以說有時候Unit也是有用的返回類型。

AnyRef代表引用類型。所有非值類型都被定義為引用類型。在Scala中,每個用戶自定義的類型都是AnyRef的子類型。如果Scala被應用在Java的運行環境中,AnyRef相當于java.lang.Object

2、Nothing和Null

Nothing是所有類型的子類型,也稱為底部類型。沒有一個值是Nothing類型的。它的用途之一是給出非正常終止的信號,如拋出異常、程序退出或者一個無限循環(可以理解為它是一個不對值進行定義的表達式的類型,或者是一個不能正常返回的方法)。

Null是所有引用類型的子類型(即AnyRef的任意子類型)。它有一個單例值由關鍵字null所定義。Null主要是使得Scala滿足和其他JVM語言的互操作性,但是幾乎不應該在Scala代碼中使用。我們將在后面的章節中介紹null的替代方案。

四、 option類型

Scala為單個值提供了對象的包裝器,表示為那種可能存在也可能不存在的值。他只有兩個有效的子類對象,一個是Some,表示某個值,另外一個是None,表示為空,通過Option的使用,避免了使用null、空字符串等方式來表示缺少某個值的做法。
如:

val map1 = Map("Alice" -> 20, "Bob" -> 30)
println(map1.get("Alice"))
println(map1.get("Jone"))

五、拓展——Scala中的加減乘除

"+-*/%"可以完成和Java中相同的工作,但是有一點區別,他們都是方法。幾乎可以用任何符號來為方法命名。

Scala中沒有++、–操作符,需要通過+=、-=來實現同樣的效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535668.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535668.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535668.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu7.10下的vi用的怪怪的

到網上查了一下,原來是ubuntu7.10默認安裝的是vim-tiny.可以重新安裝vim-full #dpkg -l 如果是vim-tiny #apt-get install vim-full

(轉)JVM監控工具介紹

2008年03月04日 16:57原作者: stone2083 原文地址:http://www.blogjava.net/stone2083/archive/2008/02/25/182081.htmljstatd啟動jvm監控服務。它是一個基于rmi的應用,向遠程機器提供本機jvm應用程序的信息。默認端口1099。實例:…

Scala的控制結構

一、 if else表達式 scala中沒有三目運算符,因為根本不需要。scala中if else表達式是有返回值的,如果if或者else返回的類型不一樣,就返回Any類型(所有類型的公共超類型)。 例如:if else返回類型一樣 scal…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset資源清單文件編寫技巧2.1、查看定義Statefulset資源需要的字段2.2、查看statefulset.spec字段如何定義2.3、查看statefulset的spec.template字段如何定義 三、Statefulset使用案例:部署web站點3.1、編寫一個Statefulset資…

Scala 函數

scala定義函數的標準格式為: def 函數名(參數名1: 參數類型1, 參數名2: 參數類型2) : 返回類型 {函數體} 函數示例1:返回Unit類型的函數 def shout1(content: String) : Unit {println(content) }函數示例2:返回Unit類型的函數&#xff0…

ubuntu7.10中的apache的一些設置

在/etc/apache2/mods-available目錄下是apache2可用的模塊.出現在這里的模塊不代表你可以用.只是表明你的apache2已經安裝了這些模塊.可用的模塊在/etc/apache2/mods-enabled這個目錄下.(從redhat系列轉過來看ubuntu,雖然感覺不習慣,但覺得ubuntu的這種分目錄的方法很不錯.) 如…

Java并發篇_Java內存模型

在并發編程中,我們通常會遇到以下三個問題:原子性問題,可見性問題,有序性問題。那么它們產生的原因和在Java中解決的辦法又是什么呢? 一、內存模型的相關概念 ? 計算機在執行程序時,每條指令都是在CPU中執…

rz的安裝

以前,在redhat系列的linux中,通過終端工具操作服務器,經常使用rz來上傳小文件.但是有些系統默認情況下不能使用此命令.今天通過ubuntu.看到這條命令.即使ubunt沒有裝這個命令,你輸入此命令時,它會提示你進行安裝. rootubuntu:~# rzThe program rz is currently not installed. …

Java并發篇_synchronized

synchronized是Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執行該段代碼。本文給大家介紹java中的用法。 一、為什么要使用synchronized 在并發編程中存在線程安全問題,主要原因有&…

mysqlreport的學習

mysqlreport是一個腳本. 需要先安裝perl-DBI和perl-DBD-MySQL這2個包 mysqlreport 使用DBI 需要有http://hackmysql.com/mysqlreportdocperl ./mysqlreport --help 看幫助 perl ./mysqlreport --user root --password 密碼mysqlreport 文檔mysqlreport 以很友好的方式顯示 My…

Java并發篇_volatile

volatile是Java提供的一種輕量級的同步機制。Java 語言包含兩種內在的同步機制:同步塊(或方法)和 volatile 變量,相比于synchronized(synchronized通常稱為重量級鎖),volatile更輕量級&#xff…

vi 語法著色

我所在部門的經理極其鄙視我用vi,這到不是說他看不慣vi,而是因為那句話"只有黑客級的人才用VI".而我只是一只小小萊鳥.所以只好被他們鄙視了. 現在說一說vi 著色的問題. 首先安裝 vim-enhanced , # yum -y install vim-enhanced 然后, # vi ~/…

Docker Dockerfile詳解

一、什么是Dockerfile Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Doc…

公司臺灣主站的url重寫

今天對公司臺灣主站的url地址進行優化.主站采用的是joomla,而joomla初建好后用的url對搜索引擎非常的不友好. Joomla中的SEF說白了就是一個對URL的重寫的過程將原來參數眾多,層次很深的URL改寫為一個簡單的更容易被記住被搜索的URL。通過分析Joomla站點的URL結果就…

編寫第一個Spring程序——IOC實現

第一個Spring程序 IOC范例 1、新建maven工程 2、在pom.xml文件中導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core&l…

改變centos系統的時區

兩條命令都可以: 1.timeconfig 2.tzselect

分布式文件系統:原理、問題與方法

本地文件系統如ext3&#xff0c;reiserfs等&#xff08;這里不討論基于內存的文件系統&#xff09;&#xff0c;它們管理本地的磁盤存儲資源、提供文件到存儲位置的映射&#xff0c;并抽象出一套文件訪問接口供用戶使用。但隨著互聯網企業的高速發展&#xff0c;這些企業對數據…

編寫第二個Spring程序——AOP實現

第二個Spring程序 AOP范例 1、新建maven工程 2、在pom.xml文件導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core<…

linux高負載下徹底優化mysql數據庫

同時在線訪問量繼續增大 對于1G內存的服務器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的服務器卡一下 這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的算法&#xff0c;因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能。 安裝好mysql后&#x…

Java注釋說明以及IDEA中的快捷鍵

一、單行注釋 說明&#xff1a;單行注釋 一般注釋少量的代碼或者說明內容 格式&#xff1a;//注釋的內容 IDEA中的快捷鍵&#xff1a;使用Ctrl /&#xff0c; 添加行注釋&#xff0c;再次使用&#xff0c;去掉行注釋 二、多行注釋 說明&#xff1a;多行注釋 一般注釋大量的…