Scala数据类型学习总结

1.对scala 数据类型体系总结
1) scala 中一切数据都是对象,都是Any 的子类。
2) scala 中数据类型分为两大类值类型(AnyVal) , 引用类型(AnyRef),不管是值类型还是引用类型
都是对象。
3) scala 数据类型仍然遵守低精度的值类型向高精度的值类型,自动转换(隐式转换)
4) scala 中有两个特殊的类型Null , 它只有一个实例就是null, 在scala 中,也叫bottom class
5) scala 中有个特殊的类型Nothing, 它是用于在一个函数没有正常返回值使用, 因为这样我们
可以把抛出的返回值,返回给任何的变量或者函数
2.scala 数据类型体系一览图

3.整数的类型

数据类型描述
Byte [1]8 位有符号补码整数。数值区间为-128 到127
Short [2]16 位有符号补码整数。数值区间为-32768 到32767
Int [4]

32 位有符号补码整数。数值区间为-2147483648 到2147483647

 

Long [8]64 位有符号补码整数。数值区间为-9223372036854775808 到
9223372036854775807 = 2 的(64-1)次方-1

4.浮点型使用细节
1) 与整数类型类似,Scala浮点类型也有固定的表述范围和字段长度,不受具体的OS的影响
2) Scala的浮点类型默认为Double型,声明Float类型常量,要在后面加上“f”或者"F"
3) 浮点类型常量有两种标识形式
    十进制数形式:如:3.14 314.0f .314(必须有小数点)
    科学计数法形式 如:3.14e2 = 3.14 * 10的2次方 3.14E-2 = 3.14/10 的2次方
4) 通常情况下,应该使用Double型,因为它比Float类型更精准(小数点后大致7位)
var n3 = 2.2345678912f //
var n4 = 2.2345678912
println("n3=" + n3) //n3=2.2345679
println("n4=" + n4) //n4=2.2345678912
5.字符类型使用细节
1) 字符常量是用单引号(‘ ’)括起来的单个字符。例如:var c1 = 'a‘ var c2 = '中‘ var c3 = '9'
2) Scala 也允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:var c3 = ‘\n’  // '\n'表示换行符
3) 可以直接给Char 赋一个整数,然后输出时,会按照对应的unicode 字符输出['\u0061' 97]
6.1 Unit 类型、Null 类型和Nothing 类型

Unit表示无值,和其他语言中void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()。
Nullnull , Null 类型只有一个实例值null
NothingNothing 类型在Scala 的类层级的最低端;它是任何其他类型的子类型。
当一个函数,我们确定没有正常的返回值,可以用Nothing 来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数或者变量(兼容性)

6.2 使用细节和注意事项
1) Null 类只有一个实例对象,null,类似于Java 中的null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如Int, Float, Char, Boolean, Long, Double, Byte, Short) 比如下面的就是错误的:var n1 : Int = null
2) Unit 类型用来标识过程,也就是没有明确返回值的函数。
由此可见,Unit 类似于Java 里的void。Unit 只有一个实例,(),这个实例也没有实质的意义
def sayOK():Unit ={ println("OK") }
3) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返
回,而且由于Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。
def test(): Nothing ={ throw new Exception }
7 值类型转换
7.1 值类型隐式转换

当Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换)。
数据类型按精度(容量)大小排序为

7.2 注意事项和细节说明
自动类型转换细节说明
1) 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
2) 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
var n2 : Long = 1L
//var n3 : Int = n2 //错误,原因不能把高精度的数据直接赋值和低精度。
3) (byte, short) 和char 之间不会相互自动转换。
4) byte,short,char 他们三者可以计算,在计算时首先转换为int 类型。
5) 自动提升原则: 表达式结果的类型自动提升为操作数中最大的类型
8 高级隐式转换和隐式函数
8.1 强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
8.2 强制类型转换细节说明
1) 当进行数据的从大——>小,就需要使用到强制转换
2) 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
3) Char 类型可以保存Int 的常量值,但不能保存Int 的变量值,需要强转
4) Byte 和Short 类型在进行运算时,当做Int 类型处理。
9 值类型和String 类型的转换
9.1基本类型转String 类型

语法: 将基本类型的值+"" 即可
9.2 注意事项
1) 在将String 类型转成基本数据类型时,要确保String 类型能够转成有效的数据,比如我们可
以把"123" , 转成一个整数,但是不能把"hello" 转成一个整数
2) 思考就是要把"12.5" 转成Int ? // 错误,在转换中,不会使用截取
10 标识符的命名规范
10.1 标识符概念

Scala 对各种变量、方法、函数等命名时使用的字符序列称为标识符凡是自己可以起名字的地方都叫标识符
10.2 标识符的命名规则(记住)
1) Scala 中的标识符声明,基本和Java 是一致的,但是细节上会有所变化。
2) 首字符为字母,后续字符任意字母和数字,美元符号,可后接下划线_
3) 数字不可以开头。
4) 首字符为操作符(比如+ - * / ),后续字符也需跟操作符,至少一个(反编译)
5) 操作符(比如+-*/)不能在标识符中间和最后.
6) 用反引号`....`包括的任意字符串,即使是关键字(39 个)也可以[true]

    var +- = "Hello"
    println("+-" + +-)

//    var + = 10 // 不要单独给一个操作符做标识符
//    println("+" + +)
    var pass = true
    var `true` = false
    println("res" + `true`)

//    var a-b = "PEK" // 操作符不能放在中间

10.3 标识符举例说明
hello // ok
hello12 // ok
1hello // error
h-b // error
x h // error
h_4 // ok
_ab // ok
Int // ok , 因为在scala Int 是预定义的字符
Float // ok
_ // error ,因为在scala _ 有很多其他的作用。
Abc // ok
+*- // ok
+a // error

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值