古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述Scala 基础 :变量和数据类型相关的知识,希望能为你提供帮助。
@TOC
一、变量和常量如何定义?
var 变量名 [: 变量类型] = 初始值
val 常量名 [: 常量类型] = 初始值
举个栗子:
var a: Int = 10;
val b: Int = 22;
// 变量类型可以省略
var a = 10;
val b = 22;
由于Scala是一个函数式编程语言,所以能用常量的地方不用变量。
【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, for
?
private, protected, abstract, sealed, final, implicit, lazy, override
?
try, catch, finally, throw
?
if, else, match, case, do, while, for, return, yield
?
def, val, var
?
this, super
?
new
?
true, false, null
字符串基本的语法
- 关键字为
String
- 通过
+
号连接 *
用于将一个字符串复制多次拼接printf
输出字符串,通过%传值- 插值字符串:
s"$变量名“
,前缀为s
格式化模板字符串,f
为格式化模板浮点数,%
后面为格式化的内容 - 原始输出:
raw"输出内容$变量名"
,输出的结果原样输出 - 输出语句:
print(输出内容)
、println()
、printf()
- 三引号表示字符串,保持多行字符串的原格式输出。
"""......."""
val name: String = "lisi" + " ";
val age: Int = 12println(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
|""".stripMarginprintln(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.Fileobject 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中一切数据都是对象,
Any
是所有数据的父类。 Any
对应有两个子类,一个是数值类型(AnyVal
),另一个是引用类型(AnyRef
)StringOps
是对Java中的String
增强。Unit
为Scala中的一个数据类型,对应Java中的void
,表示方法没有返回值,只有一个单例对象,输出为符串()
,而void
是一个关键字- Scala中默认为低精度数据类型转为高精度数据类型(自动转换 \\ 隐式转换)
Null
是一个类型,只 有一个对 象就 是null
。它是所有引用类型(AnyRef
)的子类。Nothing
,是所有数据类型的子类,在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。
< center> 数据类型图(来源于网络~)< /center>
文章图片
整数类型
Byte
[1个字节]8 位有符号补码整数
。数值区间为-128
到127
Short
[2个字节]16 位有符号补码整数
。数值区间为-32768
到32767
Int
[4个字节]32 位有符号补码整数
。数值区间为-2147483648
到2147483647
Long
[8个字节 ]64 位有符号补码整数
。数值区间为-9223372036854775808
到9223372036854775807
= 2 的(64-1)次方-1- 各整数类型有固定的表示范围和字段长度
- Scala默认的数据类型为
Int
,长整型需要加l
或者L
- 高精度数转低精度数需要强制类型转换:
val b3: Byte = (1 + 10).toByte
val al: Byte = 127
val a2: Byte = -128val a3 = 12val 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 类型数据只允许取值
true
和false
- 占一个字节
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
类型转换
- 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成
精度大的那种数据类型,然后再进行计算。 - 高精度数据转嘀精度时会报错。
Byte
,Short
和Char
之间不会相互自动转换。Byte
,Short
,Char
他们三者可以计算,在计算时首先转换为Int
类型。
val a1: Byte = 10;
val b1: Long = 20L;
val result1: Long = a1 + b1
println(result1)
强制类型转换
- 强制类型转换:
toByte
、toInt
、...... 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)
本次文章分享到这里就结束了,希望对你有所帮助!!!
推荐阅读
- C++ string 替换子串
- 线程安全
- CookieSessionToken 的区别
- MyBatis从入门到精通—源码剖析之二级缓存细节
- Scala 基础 (运算符和流程控制)
- 远程call调用
- 一次诡异的磁盘空间占用问题排查
- Java中的类和对象
- C++ 遍历进程内存块