前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala 基础 (二):变量和数据类型

Scala 基础 (二):变量和数据类型

作者头像
百思不得小赵
发布2022-12-01 14:40:06
8190
发布2022-12-01 14:40:06
举报
文章被收录于专栏:小赵Java总结小赵Java总结

大家好,我是百思不得小赵。

创作时间:2022 年 6 月 24 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀


文章目录


一、变量和常量

如何定义?

	var 变量名 [: 变量类型] = 初始值 
	val 常量名 [: 常量类型] = 初始值 

举个栗子:

	  var a: Int = 10;
	  val b: Int = 22;
	  // 变量类型可以省略
	  var a = 10;
	  val b = 22;

由于Scala是一个函数式编程语言,所以能用常量的地方不用变量。

重要的结论:

  • 声明变量时,类型可以省略,编译器自动推导,即类型推导。
  • 静态类型,类型经过给定或推导确定后就不能修改。
  • 变量和常量声明时,必须有初始值。
  • var修饰的变量可变,val修饰的常量不可变。
  • 引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
  • 不以;作为语句结尾,scala编译器自动识别语句结尾。

标识符命名的规范

  • 以字母或者下划线开头,后接字母、数字、下划线,和Java语法一样
  • Scala可以使用操作符开头,且只包含操作符(+ - * / # !等)
  • 特别之处:scala用反引号包括的任意字符串,即使是 Scala 关键字(39 个)也可以。

举个栗子:

  	val hello = ""
    var Helo = ""
    var _abc=123
	var -+/% = "hello"
	var `if` = 123

Scala中的关键字合集: • package, import, class, object, trait, extends, with, type, forprivate, protected, abstract, sealed, final, implicit, lazy, overridetry, catch, finally, throwif, else, match, case, do, while, for, return, yielddef, val, varthis, supernewtrue, false, null

与Java中不同的是:object trait with implicit match yield def val var

字符串

基本的语法

  • 关键字为 String
  • 通过 + 号连接
  • *用于将一个字符串复制多次拼接
  • printf输出字符串,通过%传值
  • 插值字符串:s"${变量名}“,前缀为 s 格式化模板字符串,f 为格式化模板浮点数,%后面为格式化的内容
  • 原始输出:raw"输出内容${变量名}",输出的结果原样输出
  • 输出语句: print(输出内容)println()printf()
  • 三引号表示字符串,保持多行字符串的原格式输出。"""......."""

举个栗子:

	 val name: String = "lisi" + " ";
	 val age: Int = 12
	 
	 println(name * 3)
	 printf("%d岁的%s在吃饭", age, name)
	    // 格式化模板字符串
	 println(s"${age}岁的${name}在吃饭")
	 
	 val num: Double = 2.26054
	 println(s"this number is ${num}")
	 println(f"this num is ${num}%2.2f")
	 println(raw"this num is ${num}%2.2f")
	 
	 val sql =
      s"""
         |select *
         | from student
         | where name = ${name}
         | and
         | age > ${age}
         |""".stripMargin
         
    println(sql)

键盘输入

基本语法

  • import scala.io.StdIn,StdIn在 IO 包下
  • StdIn.readLine() 读取字符串
  • StdIn.readShort()
  • StdIn.readDouble()

举个栗子:

object Test04_StdInt {
  def main(args: Array[String]): Unit = {
    println("请输入你的名字:")
    val name = StdIn.readLine()
    println("请输入你的年龄:")
    val age = StdIn.readInt()

    println(s"欢迎${age}的${name},光临本系统!!!")
  }
}

文件输入输出:

import scala.io.Source
import java.io.PrintWriter
import java.io.File

object Test05_FileIO {
  def main(args: Array[String]): Unit = {
    // 1.从文件中读取数据
    Source.fromFile("src/main/resources/test.txt").foreach(print)

    // 2。将数据写入文件
    val writer = new PrintWriter(new File("src/main/resources/put.txt"))
    writer.write("hello scala from java")
    writer.close()
  }
}

二、数据类型

Java中的数据类型

  • 基本类型:char、byte、short、int、long、float、double、boolean
  • 对应的包装类:Character、Byte、Short、Integer、Long、Float、Double、Boolean
  • 由于Java有基本类型,而且基本类型不是真正意义的对象,Java不是纯粹的面向对象。

Scala中的数据类型

  • Scala中一切数据都是对象,Any是所有数据的父类。
  • Any对应有两个子类,一个是数值类型(AnyVal),另一个是引用类型(AnyRef
  • StringOps是对Java中的String增强。
  • Unit为Scala中的一个数据类型,对应Java中的void,表示方法没有返回值,只有一个单例对象,输出为符串(),而void是一个关键字
  • Scala中默认为低精度数据类型转为高精度数据类型(自动转换 \ 隐式转换)
  • Null是一个类型,只 有一个对 象就 是null。它是所有引用类型(AnyRef)的子类。
  • Nothing,是所有数据类型的子类,在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。

数据类型图(来源于网络~)

在这里插入图片描述
在这里插入图片描述

整数类型

  • Byte [1个字节] 8 位有符号补码整数。数值区间为 -128127
  • Short [2个字节] 16 位有符号补码整数。数值区间为 -3276832767
  • Int [4个字节] 32 位有符号补码整数。数值区间为 -21474836482147483647
  • Long [8个字节 ] 64 位有符号补码整数。数值区间为 -92233720368547758089223372036854775807= 2 的(64-1)次方-1
  • 各整数类型有固定的表示范围和字段长度
  • Scala默认的数据类型为Int,长整型需要加 l 或者 L
  • 高精度数转低精度数需要强制类型转换: val b3: Byte = (1 + 10).toByte

举个栗子:

    val al: Byte = 127
    val a2: Byte = -128

    val a3 = 12

    val b1: Byte = 10
    val b2: Byte = (10 + 20)
    println(b2)

    val b3: Byte = (b1 + 10).toByte

浮点类型

  • Float [4] 32 位, IEEE 754 标准的单精度浮点数
  • Double [8] 64 位 IEEE 754 标准的双精度浮点数
  • 默认为Double类型

举个栗子:

    val f1: Float = 1.232f
    val d2 = 12.987

字符类型

  • 字符类型是 Char,表示单个字符
  • 字符常量是用单引号 ’ ’ 括起来的单个字符。
  • 转义字符:\t 、\n、\\、\”

布尔类型

  • Booolean 类型数据只允许取值 truefalse
  • 占一个字节

举个栗子:

    val isTrue = true
    val isFalse: Boolean = false
    println(isTrue)

空类型

  • Unit :表示无值 只有一个实例值,写成()
  • Null : Null 类型只有一个实例值 null
  • Nothing : 确定没有正常的返回值,可以用 Nothing 来指定返回类型

举个栗子:

    def m2(n: Int): Int = {
      if (n == 0)
        throw new NullPointerException
      else
        return n
    }

类型转换

  • 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成 精度大的那种数据类型,然后再进行计算。
  • 高精度数据转嘀精度时会报错。
  • ByteShortChar 之间不会相互自动转换。
  • ByteShortChar 他们三者可以计算,在计算时首先转换为 Int 类型。

举个栗子:

    val a1: Byte = 10;
    val b1: Long = 20L;
    val result1: Long = a1 + b1
    println(result1)

强制类型转换

  • 强制类型转换:toBytetoInt、…
  • 'aaa'.toInt 2.2.toInt
  • 存在精度丢失
  • 数值和String之间的转换:基本类型的值+" "s1.toInt、s1.toFloat、s1.toDouble、s1.toByte

举个栗子:

   val n1: Int = 2.5.toInt
    println(n1)

    val n2: Int = (2.6 + 3.7).toInt
    println(n2)
    // 数值转为String
    val a: Int = 27
    val s: String = a + " "
    println(s)

    //String转换为数值
    val m: Int = "12".toInt
    val f: Float = "12.4".toFloat
    val f2: Int = "12.6".toFloat.toInt
    println(f2)

本次文章分享到这里就结束了,希望对你有所帮助!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、变量和常量
    • 标识符命名的规范
      • 字符串
        • 键盘输入
        • 二、数据类型
          • 整数类型
            • 浮点类型
              • 字符类型
                • 布尔类型
                  • 空类型
                    • 类型转换
                      • 强制类型转换
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档