开发者学堂课程【Scala 核心编程-基础:Scala 字符类型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8894
Scala 字符类型
目录
一、字符类型(Char)
二、字符类型使用细节
一、字符类型(Char)
1、基本介绍
字符类型可以表示单个字符,字符类型是 Char,16位无符号 Unicode 字符(2个字节),区间值为 U+0000到 U+FFFF
2、案例演示:
var c1 : Char ='a'
var c2 : Char = '\t'
var c3 : Char='你'
varc4:Char=97
Char 类型是字符类型。在 Scala 里,Char 是由两个字节来表示,表示的范围是 U+0000到 U+FFFF。
二、字符类型使用细节
1、字符常量是用单引号(‘’)括起来的单个字符。
例如: var cl =‘a’ var c2 =‘中’ var c3 =‘9’
2、Scala 也允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
例如: var c3 =‘\n' //‘\n'表示换行符
转义 字符 |
\b |
\n |
\r |
\t |
\” |
\’ |
\\ |
说明 |
退格符 |
换行符 |
回车符 |
制表符 |
双引号 |
单引号 |
反斜线 |
3、可以直接给 Char 赋一个整数,然后输出时,会按照对应的 unicode 字符输出[‘\u0061'97]
举例:
新建 Create New Scala Class,Name 为 CharDemo,Kind 为 Object。
打开编辑:
package com.atguigu.chapter02.datatype
object CharDemo {
def main(args: Array[String]): Unit = {
var char1 :Char = 97
println("char1=" + char1) // a
}
}
给一个数值97,指定类型是 Char。运行结果:
char1=a
结果看到,char1输出的是一个 a,而不是97。
当输出一个 char 类型时,会输出该数字对应的字符(码值表 unicode)
Unicode 码值表包含了 ASCII 码。
对于大数据来说可能用到的不是很多,但有时候大数据工程师在一些小公司里面也兼任 Web 工程师,偶尔需要把界面展示出来,多少会涉及到编码的问题,所以,需要了解 ASCII 码表。
4、Char 类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码。
var cl: Char = 'a'
var num:Int = 10 + c1 + 'b'
如 c1写为 a,将其当做整型运算也是可行的。
Char 可以当做数字进行运算。打开 CharDemo.scala 继续编辑
……
var char2:Char
=
'a
’
var num = 10 + char2
println("num=" + num)
……
运行结果:
num=107
实际是97+10=107。可以看出这个 char 可以当做数字计算。
5、思考:var c2 :Char= 'a'+ 1正确吗?
这里会报错。在 Java 里,讲过一个细节,a+1本身没问题,但是当 a 这个字符跟一个数字运算之后,先要进行类型转换,会先把 a 转成一个 Int 类型,因此,整个结果就变成Int类型。一旦变成 Int 类型,再赋值给 Char,就相当于把一个高精度的值交给 Char。在 Scala 数据类型图中,可以看到转换关系,Char 可以给 Int,但是 Int 不能转给 Char。
将 var c2:Char= 'a'+ 1放到程序里,可以看到错误非常清晰,提示:Expression of type Int doesn't conform to expected type Char。
同样:
var C3: Char = 97+1 也会报错。提示:Expression of type Int doesn't conform to expected type Char
原因及分析:
(1) 当把一个计算的结果赋值一个变量,则编译器会进行类型转换及判断(即会看范围+类型)
(2) 当把一个字面量赋值一个变量,则编译器会进行范围的判定
编译器工作的时候,既要看范围值有没有越界,还要看类型是否匹配。var c2:Char= 'a'+ 1
这里的 Char,首先看类型,这个类型是 a,会先把 a 转成 Int 类型。已经有这个类型转换的逻辑了,这个结果就会是Int 类型,把 Int 类型交给 Char,显然判断拒绝。
var C3: Char = 97+1
97+1也进行了运算,运行的时候就会先判断类型,是 Int 类型。
var C4: Char = 98
编译器进行范围大小的判定。98并没有超过 Char 的范围。则可行。
var C5: Char = 99999
数字超过 Char 范围。也会报错。