柚子快報激活碼778899分享:大數(shù)據(jù) Scala學(xué)習(xí)(三)
2.8 浮點類型(Float、Double)
Scala的浮點類型可以表示一個小數(shù),比如123.4f,7.8,0.12等等。 1)浮點型分類 數(shù)據(jù)類型 描述 Float [4] 32 位, IEEE 754標(biāo)準(zhǔn)的單精度浮點數(shù) Double [8] 64 位 IEEE 754標(biāo)準(zhǔn)的雙精度浮點數(shù) 2)案例實操 Scala的浮點型常量默認(rèn)為Double型,聲明Float型常量,須后加‘f’或‘F’。
object Test03_Type{
def main(args: Array[String]): Unit = {
// 浮點數(shù)介紹
// 默認(rèn)使用double
val d: Double = 3.14
// 如果使用float 在末尾添加f
val fl = 3.14f
// 浮點數(shù)計算有誤差
println(0.1 / 3.3)
}
}
//運行的結(jié)果
0.030303030303030307
2.9 字符類型(Char)
1)基本說明 字符類型可以表示單個字符,字符類型是Char。 2)案例實操 (1)字符常量是用單引號 ’ ’ 括起來的單個字符。 (2)\t :一個制表位,實現(xiàn)對齊的功能 (3)\n :換行符 (4)\ :表示 (5)" :表示"
object Test03_Type{
def main(args: Array[String]): Unit = {
// (1)字符常量是用單引號 ' ' 括起來的單個字符。
val c1: Char = 'a'
val c2: Char = 65535
// (2)\t :一個制表位,實現(xiàn)對齊的功能
val c3: Char = '\t'
// (3)\n :換行符
val c4: Char = '\n'
println(c3 + 0)
println(c4 + 0)
// (4)\\ :表示\
val c5: Char = '\\'
println(c5 + 0)
// (5)\" :表示"
val c6: Char = '\"'
println(c6 + 0)
}
}
2.10 布爾類型:Boolean
1)基本說明 (1)布爾類型也叫Boolean類型,Booolean類型數(shù)據(jù)只允許取值true和false (2)boolean類型占1個字節(jié)。 2)案例實操
object Test03_Type{
def main(args: Array[String]): Unit = {
val bo1: Boolean = true
val bo2: Boolean = false
}
}
2.11 Unit類型、Null類型和Nothing類型(重點)
1)基本說明 數(shù)據(jù)類型 描述 Unit 表示無值,和其他語言中void等同。用作不返回任何結(jié)果的方法的結(jié)果類型。Unit只有一個實例值,寫成()。 Null null , Null 類型只有一個實例值null Nothing Nothing類型在Scala的類層級最低端;它是任何其他類型的子類型。 當(dāng)一個函數(shù),我們確定沒有正常的返回值,可以用Nothing來指定返回類型,這樣有一個好處,就是我們可以把返回的值(異常)賦給其它的函數(shù)或者變量(兼容性) 2)案例實操 (1)Unit類型用來標(biāo)識過程,也就是沒有明確返回值的函數(shù)。 由此可見,Unit類似于Java里的void。Unit只有一個實例——( ),這個實例也沒有實質(zhì)意義。
object Test03_Type{
def main(args: Array[String]): Unit = {
// unit
val unit1: Unit = {
10
println("1")
}
println(unit1)
// 如果標(biāo)記對象的類型是unit的話 后面有返回值也沒法接收
// unit雖然是數(shù)值類型 但是可以接收引用數(shù)據(jù)類型 因為都是表示不接收返回值
val i3: Unit = "aa"
println(i3)
}
}
(2)Null類只有一個實例對象,Null類似于Java中的null引用。Null可以賦值給任意引用類型(AnyRef),但是不能賦值給值類型(AnyVal)。
object Test03_Type {
def main(args: Array[String]): Unit = {
// scala當(dāng)中使用的字符串就是java中的string
val aa: String = "aa"
// null
var aa1: String = "aa"
aa1 = "bb"
aa1 = null
if (aa1 != null) {
val strings: Array[String] = aa1.split(",")
}
// 值類型不能等于null,idea不會識別報錯 編譯器會報錯
var i4 = 10
// i4 = null
}
}
(3)Nothing,可以作為沒有正常返回值的方法的返回類型,非常直觀的告訴你這個方法不會正常返回,而且由于Nothing是其他任意類型的子類,他還能跟要求返回值的方法兼容。
object Test03_Type {
def main(args: Array[String]): Unit = {
val value: Nothing = {
println("hello")
1 + 1
throw new RuntimeException()
}
}
}
2.12 類型轉(zhuǎn)換
Java的隱式轉(zhuǎn)換規(guī)則:
public class TestCast {
public static void main(String[] args) {
byte n = 23;
test(n);
}
public static void test(byte b) {
System.out.println("bbbb");
}
public static void test(short b) {
System.out.println("ssss");
}
public static void test(char b) {
System.out.println("cccc");
}
public static void test(int b) {
System.out.println("iiii");
}
}
2.12.1 數(shù)值類型自動轉(zhuǎn)換
當(dāng)Scala程序在進行賦值或者運算時,精度小的類型自動轉(zhuǎn)換為精度大的數(shù)值類型,這個就是自動類型轉(zhuǎn)換(隱式轉(zhuǎn)換)。數(shù)據(jù)類型按精度(容量)大小排序為: 1)基本說明 (1)自動提升原則:有多種類型的數(shù)據(jù)混合運算時,系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成精度大的那種數(shù)據(jù)類型,然后再進行計算。 (2)把精度大的數(shù)值類型賦值給精度小的數(shù)值類型時,就會報錯,反之就會進行自動類型轉(zhuǎn)換。 (3)(byte,short)和char之間不會相互自動轉(zhuǎn)換。 (4)byte,short,char他們?nèi)呖梢杂嬎悖谟嬎銜r首先轉(zhuǎn)換為int類型。 2)案例實操
object Test04_TypeCast {
def main(args: Array[String]): Unit = {
// (1)自動提升原則:有多種類型的數(shù)據(jù)混合運算時,
// 系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成精度大的那種數(shù)據(jù)類型,然后再進行計算。
val fl: Float = 1 + 1L + 3.14f
val d: Double = 1 + 1L + 3.14f + 3.14
// (2)把精度大的數(shù)值類型賦值給精度小的數(shù)值類型時,就會報錯,反之就會進行自動類型轉(zhuǎn)換。
val i = 10
val b: Double = i
// (3)(byte,short)和char之間不會相互自動轉(zhuǎn)換。
// 因為byte和short是有符號的數(shù)值,而char是無符號的
val b1: Byte = 10
val c1: Char = 20
// (4)byte,short,char他們?nèi)呖梢杂嬎?,在計算時首先轉(zhuǎn)換為int類型。
val b2: Byte = 20
// val i1: Byte = b1 + b2
val i1: Int = 1100000000
val i2: Int = 1200000000
// 超出范圍的int值計算會造成結(jié)果錯誤
val i3: Int = i1 + i2
println(i3)
}
}
注意:Scala還提供了非常強大的隱式轉(zhuǎn)換機制(隱式函數(shù),隱式類等)
2.12.2 強制類型轉(zhuǎn)換
1)基本說明 自動類型轉(zhuǎn)換的逆過程,將精度大的數(shù)值類型轉(zhuǎn)換為精度小的數(shù)值類型。使用時要加上強制轉(zhuǎn)函數(shù),但可能造成精度降低或溢出,格外要注意。 Java : int num = (int)2.5 Scala : var num : Int = 2.7.toInt 2)案例實操 (1)將數(shù)據(jù)由高精度轉(zhuǎn)換為低精度,就需要使用到強制轉(zhuǎn)換。 (2)強轉(zhuǎn)符號只針對于最近的操作數(shù)有效,往往會使用小括號提升優(yōu)先級。
object Test04_TypeCast {
def main(args: Array[String]): Unit = {
// 強制類型轉(zhuǎn)換
val d1 = 2.999
// (1)將數(shù)據(jù)由高精度轉(zhuǎn)換為低精度,就需要使用到強制轉(zhuǎn)換
println((d1 + 0.5).toInt)
// (2)強轉(zhuǎn)符號只針對于最近的操作數(shù)有效,往往會使用小括號提升優(yōu)先級
println((10 * 3.5 + 6 * 1.5).toInt)
}
}
2.12.3 數(shù)值類型和String類型間轉(zhuǎn)換
1)基本說明 在程序開發(fā)中,我們經(jīng)常需要將基本數(shù)值類型轉(zhuǎn)成String類型?;蛘邔tring類型轉(zhuǎn)成基本數(shù)值類型。 2)案例實操 (1)基本類型轉(zhuǎn)String類型(語法:將基本類型的值+“” 即可)。 (2)String類型轉(zhuǎn)基本數(shù)值類型(語法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)。
object Test04_TypeCast {
def main(args: Array[String]): Unit = {
// (1)基本類型轉(zhuǎn)String類型(語法:將基本類型的值+"" 即可)
val string: String = 10.0.toString
println(string)
val str: String = 1 + ""
// (2)String類型轉(zhuǎn)基本數(shù)值類型(語法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
val double: Double = "3.14".toDouble
println(double + 1)
println(double.toInt)
// 不能直接將小數(shù)類型的字符串轉(zhuǎn)換為整數(shù) 需要先轉(zhuǎn)換為double再轉(zhuǎn)換int
// println("3.14".toInt)
// 標(biāo)記為f的float數(shù)能夠識別
// println("12.6f".toFloat)
}
}
擴展面試題數(shù)值存儲機制介紹:
object Test04_TypeCast {
def main(args: Array[String]): Unit = {
// 將int值130強轉(zhuǎn)為byte 值為多少
// 0000 0000 ..16.. 1000 0010 => 表示int的130
val i4 = 130
// 1000 0010
println(i4.toByte)
}
}
柚子快報激活碼778899分享:大數(shù)據(jù) Scala學(xué)習(xí)(三)
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。