2. 變數

来源:https://www.cnblogs.com/zhanghuicheng/archive/2019/04/20/10742463.html
-Advertisement-
Play Games

2.1 變數是程式的基本組成單位 舉一個簡單的例子 2.2 變數的介紹 2.2.1 概念 變數相當於記憶體中一個數據存儲空間的表示,可以把變數看作是一個房間的門牌號,通過門牌號我們可以找到對應的房間,而通過變數名可以訪問到變數(值)。 2.2.2 變數使用的基本步驟 1) 聲明/定義變數(Scala要 ...


2.1 變數是程式的基本組成單位

       舉一個簡單的例子

       

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    var a: Int = 10 //定義一個整型變數,取名 a,並賦初值 10
    var b: Int = 12 //定義一個整型變數,取名 b,並賦初值 12
    b = 9 //給變數b 賦 9
    println("a=" + a) //輸出語句,把變數 a 的值輸出
    println("b=" + b) //把變數 b 的值輸出

  }

}

 

2.2 變數的介紹

  2.2.1 概念

         變數相當於記憶體中一個數據存儲空間的表示,可以把變數看作是一個房間的門牌號,通過門牌號我們可以找到對應的房間,而通過變數名可以訪問到變數(值)。

  2.2.2 變數使用的基本步驟

         1) 聲明/定義變數(Scala要求變數聲明時初始化)

         2) 使用

2.3 Scala變數的基本使用

  2.3.1 快速入門

       

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    var age: Int = 9
    var sal: Double = 9.9
    var name: String = "Jack"
    var ifPass: Boolean = true
    //在scala中,小數預設為Double ,整數預設為Int
    var score: Float = 22.9f
    println(s"${age} ${ifPass}")

  }

} 

      示意圖

示意圖 

2.4 Scala變數使用說明 

  2.4.1 變數聲明基本語法

                var | val 變數名 [: 變數類型] = 變數值 

  2.4.2 註意事項

                1) 聲明變數時,類型可以省略(編譯器自動推導, 即類型推導)

                2) 類型確定後,就不能修改,說明Scala是強數據類型語言

                3) 在聲明/定義一個變數時,可以使用var或val來修飾,var修飾的變數可以改變,val修飾的變數不可改變

                4) val修飾的變數在編譯後,等同於加上final

                5) var 修飾的對象引用可以改變,val修飾的則不可改變,但對象的狀態(值)卻是可以改變的(比如: 自定義對象、數組、集合等)

                6) 變數聲明時,需要初始值

2.5 程式中+號的使用

           1) 當左右兩邊都是數值型時,則做加法運算

               2) 當左右兩邊有一方為字元串,則做拼接運算

2.6 數據類型

     1) Scala與Java有著相同的數據類型,在Scala中數據類型都是對象,也就是說Scala沒有Java中的原生類型

               2) Scala數據類型分為兩大類 AnyVal(值類型)和AnyRef(引用類型),註意不管是AnyVal還是AnyRef都是對象

               3) 相對於Java的類型系統,Scala更要複雜些,也正是這複雜多變的類型系統才讓面向對象編程和函數式編程完美的融合在了一起

  2.6.1 Scala數據類型體系

Scala數據類型體系

  對上面圖的小結和整理

         1) 在Scala中有一個根類型Any,它是所有類的父類

         2) Scala中一切皆為對象,分為兩大類 AnyVal(值類型)和AnyRef(引用類型),它們都是Any的子類

         3) Null類型是Scala的特別類型,它只有一個值null,它是bottom class,是所有AnyRef類型的子類

         4) Nothing類型也是bottom class,它是所有類的子類,在開發中通常可以將Nothing類型的值返回給任意變數或者函數,這裡拋出異常使用很多

         

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    println(sayHello)

  }

  /*比如開發中,我們有一個方法,就會異常中斷,這時就可以返回Nothing
    即當我們Nothing做返回值,就是明確說明該方法沒有沒有正常返回值*/
  def sayHello: Nothing = {
    throw new Exception("拋出異常")
  }

}

         5) 在Scala中仍然遵守,低精度的值,向高精度的值自動轉換(implicit conversion)隱式轉換

    var num_one = 1.7 //預設為 double
    var num_two = 1.9f //這是 float
    //num_two = num_one ,error ,修改 num_two = num_one.toFloat

  2.6.2 Scala數據類型列表

2.7 整數類型

  2.7.1 基本介紹

               Scala的整數類型就是用於存放整數值的,比如 9,22,123等等

  2.7.2 整型的類型

   

  2.7.3 整型的使用細節           

              1) Scala各整數類型有固定的表數範圍和欄位長度,不受具體OS的影響,以保證Scala程式的可移植性

              2) Scala的整型常量/字面量預設為Int類型,聲明Long類型常量/字面量時,須後加“l”或者“L”

              3) Scala程式中變數常聲明為Int類型,除非不足以表示大數,才使用Long

              4) 案例

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    println("Long的最大值:" + Long.MaxValue + "~" + Long.MinValue)
    var a = 10 //a Int
    var b = 10l //b Long
    var c = 9223372036854775807l //說 9223372036854775807 超過 Int
    
  }

}

 2.8 浮點類型      

  2.8.1 基本介紹     

               Scala的浮點類型可以表示一個小數,比如 9.9f,22.9,0.6等等

  2.8.2 浮點類型的分類      

  2.8.3 浮點類型使用細節      

                1) 與整數類型類似,Scala浮點類型也有固定的表數範圍和欄位長度,不受具體OS的影響

                2) Scala的浮點類型常量預設為Double類型,聲明Float類型常量時,須後加“f”或者“F”

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    var num1:Float = 1.2345678912f
    var num2:Double = 1.2345678912
    println("num1=" + num1 + "\n" +"num2=" + num2)
    /*
    運行結果:
    num1=1.2345679
    num2=1.2345678912
    */

  }

}

                3) 浮點型常量有兩種表示形式

                    十進位數形式:如5.21,521.0f,.521等 (必須有小數點)

                    科學計數法形式:如5.21e2 = 5.21 乘以10的2次方,5.21E-2 = 5.21 除以10的2次方

                4) 通常情況下,應該使用Double類型,因為它比Float類型更精確(小數點後大致7位)   

2.9 字元類型(Char)   

  2.9.1 基本介紹  

                字元類型可以表示單個字元,字元類型是Char,16位無符號Unicode字元(2個位元組),區間值為U+0000到U+FFFF

  2.9.2 案例演示   

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    var char1: Char = 99
    //當我們輸出一個char類型是,它會輸出該數字對應的字元(碼值表 unicode)//unicode 碼值表包括ascii
    println("char1=" + char1) // c

    //char可以當做數字進行運行
    var char2: Char = 'c'
    var num = 10 + char2
    println("num=" + num) // 109

    //原因和分析
    //1. 當把一個計算的結果賦值一個變數,則編譯器會進行類型轉換及判斷(即會看範圍+類型)
    //2. 當把一個字面量賦值一個變數,則編譯器會進行範圍的判定
    //   var c2: Char = 'c' + 1  error
    //   var c3: Char = 99 + 1   error
    //   var c4: Char = 100      true
  }

}

  2.9.3 字元類型使用細節    

      1) 字元常量是使用單引號( ' ' )括起來的單個字元,例如:var a1 = 'a', var a2 = '張', var a3 = '20'

      2) Scala也允許使用轉義字元 '\' 來將其後的字元轉變為特殊字元型常量,例如:var a4 = '\n' ('\n'表示換行符)

      3) 可以直接給Char賦一個整數,然後輸出時,會按照對應的Unicode字元輸出

      4) Char類型是可以進行運算的,相當於一個整數,因為它都對應有Unicode碼

2.10 布爾類型(Boolean)  

  2.10.1 基本介紹   

                  布爾類型也叫Boolean類型,Boolean類型數據只允許取值true或false,布爾類型占一個位元組

                  布爾類型適用於邏輯運算,一般用於程式流程式控制制 [後面詳解]

2.11 Unit類型、Null類型和Nothing類型  

  2.11.1 基本說明   

  2.11.2 使用細節案例

      1) Unit類型用來標識過程,也就沒有明確返回值的函數。由此可見,Unit類似於Java里的void。Unit直郵一個實例,(),這個實例也沒有實質的意義

      2) Null類只有一個實例對象,null,類似於Java中null的引用。null可以賦值給任意引用類型(AnyRef),但是不能賦值給值類型(AnyVal,比如:Int,Float,Char,         Boolean,Long,Double,Byte,Short)

      3) Nothing,可以作為沒有正常返回值的方法的返回類型,非常直觀的告訴你這個方法不會正常返回,而且由於Nothing是其它任意類型的子類,它還能跟要求返回值的方法相容

      4) 代碼案例

object boke_demo01 {

  def main(args: Array[String]): Unit = {

    val res = sayHello()
    println("res=" + res)

    //Null類只有一個實例對象,null,類似於Java中的null引用。null可以賦值給任意引用類型(AnyRef)
    //但是不能賦值給值類型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
    val dog: Dog = null
    //錯誤
    //    val char1: Char = null
    //    println("ok~~~")

  }

  //Unit等價於java的void,只有一個實例值()
  def sayHello(): Unit = {

  }

  class Dog {

  }

}

2.12 值類型轉換

  2.12.1 值類型隱式轉換  

      當Scala程式在進行賦值或者運算時,精度小的數據類型自動轉換為精度大的數據類型這個就是自動類型轉換(隱式轉換)

                  數據類型按精度(容量)大小排序為

      自動類型轉換細節說明

        1) 

        2)

        3)

        4)

        5)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建進程,守護進程,進程鎖Lock,進程通信IPC,JoinableQueue模塊簡介,進程池 ...
  • A.值棧概述 值棧(ValueStack),通俗的來說就是Struts2裡面用來管理和存儲數據的東西。struts2項目部署運行後,底層會創建一個action實例,同時也會在記憶體上劃分一塊區域,這個區域就是值棧,該值棧對象會貫穿整個Action生命周期,用來存儲這個過程中的數據。 B.值棧結構 首先 ...
  • 參考鏈接: https://blog.csdn.net/czyt1988/article/details/52121360 http://blog.sina.com.cn/s/blog_a6fb6cc90101gv2p.html 1. QAxObject介紹 在QT中,有個自帶的QAxObject類 ...
  • ___setattr__魔方方法一定要註意防止無限遞歸當在此方法內部給屬性賦值的時候,那會調用此方法,又會重新賦值,無限重覆最後要歸於super是種解決方法。或者用dict方法。 1 class Recangle: 2 def __init__(self,width = 0,heigh = 0): ...
  • 在python3中爬蟲常用基本庫為urllib以及requests 本文主要描述urllib的相關內容 urllib包含四個模塊:requests——模擬發送請求 error——異常處理模塊 parse——關於URL處理方法的工具模塊 robotparser——通過識別網站robot.txt判斷網站 ...
  • 這裡 sqlproxy起到一個代理的作用,使用時無需關註 mysql和oracle的實現 ...
  • 什麼是優先順序隊列? 怎麼實現一個優先順序隊列? PriorityQueue是線程安全的嗎? PriorityQueue就有序的嗎? ...
  • 此程式在Windows10 CodeBlocks17.12環境下測試運行,其他編程環境未經測試! 作業需求↓↓↓↓↓↓ 運行效果圖如下 (codeblocks下載地址http://www.codeblocks.org/downloads/binaries) C++代碼 2019-04-20-20:3 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...