Scala 基础 (二):变量和数据类型
一、变量和常量
如何定义?
举个栗子:
由于 Scala 是一个函数式编程语言,所以能用常量的地方不用变量。
重要的结论:
声明变量时,类型可以省略,编译器自动推导,即类型推导。
静态类型,类型经过给定或推导确定后就不能修改。
变量和常量声明时,必须有初始值。
var 修饰的变量可变,val 修饰的常量不可变。
引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
不以;作为语句结尾,scala 编译器自动识别语句结尾。
标识符命名的规范
以字母或者下划线开头,后接字母、数字、下划线,和 Java 语法一样
Scala 可以使用操作符开头,且只包含操作符(+ - * / # !等)
特别之处:scala 用反引号包括的任意字符串,即使是 Scala 关键字(39 个)也可以。
举个栗子:
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
与 Java 中不同的是:
object trait with implicit match yield def val var
字符串
基本的语法
关键字为
String
通过
+
号连接*
用于将一个字符串复制多次拼接printf
输出字符串,通过 %传值插值字符串:
s"${变量名}“
,前缀为s
格式化模板字符串,f
为格式化模板浮点数,%
后面为格式化的内容原始输出:
raw"输出内容${变量名}"
,输出的结果原样输出输出语句:
print(输出内容)
、println()
、printf()
三引号表示字符串,保持多行字符串的原格式输出。
"""......."""
举个栗子:
键盘输入
基本语法
import scala.io.StdIn
,StdIn 在 IO 包下StdIn.readLine()
读取字符串StdIn.readShort()
StdIn.readDouble()
.....................
举个栗子:
文件输入输出:
二、数据类型
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
,是所有数据类型的子类,在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。<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
举个栗子:
浮点类型
Float
[4] 32 位, IEEE 754 标准的单精度浮点数Double
[8] 64 位 IEEE 754 标准的双精度浮点数默认为
Double
类型
举个栗子:
字符类型
字符类型是
Char
,表示单个字符字符常量是用单引号 ' ' 括起来的单个字符。
转义字符:
\t 、\n、\\、\”
布尔类型
Booolean 类型数据只允许取值
true
和false
占一个字节
举个栗子:
空类型
Unit
:表示无值 只有一个实例值,写成()
Null
: Null 类型只有一个实例值null
Nothing
: 确定没有正常的返回值,可以用 Nothing 来指定返回类型
举个栗子:
类型转换
自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
高精度数据转嘀精度时会报错。
Byte
,Short
和Char
之间不会相互自动转换。Byte
,Short
,Char
他们三者可以计算,在计算时首先转换为Int
类型。
举个栗子:
强制类型转换
强制类型转换:
toByte
、toInt
、......'aaa'.toInt 2.2.toInt
存在精度丢失
数值和 String 之间的转换:
基本类型的值+" "
、s1.toInt、s1.toFloat、s1.toDouble、s1.toByte
举个栗子:
本次文章分享到这里就结束了,希望对你有所帮助!!!
版权声明: 本文为 InfoQ 作者【百思不得小赵】的原创文章。
原文链接:【http://xie.infoq.cn/article/9a7c20b13364d9f94f8bdb47f】。文章转载请联系作者。
评论