Scala的基本数据类型
Scala中的基本数据类型的首字母必须大写,类型支持与Java类似:
整型Int和长整型Long型知识点:
Scala支持十进制和十六进制(用0x修饰)两种表示,但请注意scala 2已经弃用八进制表示方法(以0开头)。
Long类型表示与Java一样,L或l跟在最后。
(本文出自:https://my.oschina.net/happyBKs/blog/882405)
浮点数类型Double和Float:
(1)双精度和单精度的表示方式与Java和C++颇为类似,无修饰的小数是Double,尾部带有F或者f的表示为单精度。
(2)两者相加可以看到,类型进行了隐式转换,自动转为了“更大”的类型Double。
(3)在scala中,存在着与Java类似的浮点数陷阱,那就是由于浮点小数存储的时候真实环境是存储在一个二进制的环境当中,所以一些小数在进行了一些操作之后我们发现它与我们预期的“正确值”存在着某种误差,这是因为我们觉得理所应当的某些“答案”值无法恰好能够被二进制表示出来,只能近似表示。如上例中便是这样。
(4)浮点式的科学计数法表示如下:
字符类型Char和字符串类型String:
下面两组例子很好的说明了scala里的字符串转义字符的处理。
头两个例子没什么好说的,天下的语言在处理一些特殊字符如双引号等都需要转义。但是一些书写场景,也许不需要转义但偏偏需要多写一大堆斜杠。
在C#中,如果希望字符串中的斜杠不要转义,可以@"KKKKKK"。Java中没有办法,认命。Scala中,用的方法是三双引号,里面则无须转义,和python有点像。
再看看一个例子:
字符串拼接方式两种如下:
布尔类型Boolean:
Scala基本数据运算的本质
Scala是一门函数式编程语言,也是面向对象的编程语言。在Scala中,即使是最基本的数据类型、最近本的操作,其本质上也都是面向对象的实现和调用。
例如Int类型的加法1+2,实际上是Int对象1调用了自身的对象方法+,方法+的参数是一个Int类型的参数,我们赋值参数为Int对象2。也就是说1+2,实际上是(1).+(2)
算数运算:
//整数求和,编译器会将其转换为(1).+(2)执行
scala> var sumVlaue=1+2
sumVlaue: Int = 3
//前一语句等同于下列语句
scala> var sumVlaue=(1).+(2)
sumVlaue: Int = 3
//操作符重载,编译器会将其转换为(1).+(2L)执行
scala> val longSum = 1 + 2L
longSum: Long = 3
//减法
scala> 1-3
res5: Int = -2
//除法
scala> 1/3
res6: Int = 0
//取模
scala> 1%3
res7: Int = 1
//乘法
scala> 1L*3L
res8: Long = 3
//scala中可以用+ -符号来表示正负数,例如-3 +3,并且可以加入到运算符当中
scala> var y=1+ -3
y: Int = -2
关系运算:
//>运算符
scala> 3 > -3
res12: Boolean = true
//<运算符
scala> 3 < -3
res13: Boolean = false
//<=运算符
scala> 3 <= -3
res14: Boolean = false
//<=运算符
scala> 3 <=3
res15: Boolean = true
//<=运算符
scala> !(3<= -3)
res16: Boolean = true
逻辑运算:
//逻辑与:&&
scala> val bool=true
bool: Boolean = true
scala> bool && bool
res17: Boolean = true
//逻辑或:||
scala> bool || bool
res18: Boolean = true
scala> bool || !bool
res20: Boolean = true
位运算:
// 00000001
// 00000010
// 00000000
scala> 1 & 2
res24: Int = 0
// 00000001
// 00000010
// 00000011
scala> 1 | 2
res24: Int = 3
// 00000001
// 00000011
// 00000010
scala> 1 ^ 3
res24: Int =2
//00000001
//11111110
scala> ~1
res24: Int =-2
//左移位(shift left)
//00000110
//00001100
scala> 6 << 1
res29: Int = 12
//右移位(shift left)
//00000110
//00000011
scala> 6 >> 1
res28: Int = 3
//无符号右移(shift left)
//11111111111111111111111111111111
//00000000000000000000000000000001
scala> -1 >>> 31
res32: Int = 1
运算符的优先级: 运算符优先级如下图所示,* / %优先级最高,依次类推
Scala中的对象比较不同于Java中的对象比较
Scala中的对象比较不同于Java中的对象比较 //Scala基于内容比较,而java中比较的是引用,进行内容比较时须定义比较方法
另外,注意一个Scala计算的浮点数陷阱:
下面在数学里应该是不相等的,但是在Scala里,由于数据精度的原因,它们是相等的。
交互式模式scala shell退出方式是:
:quit
Scala的编译和运行
Scala支持如python一样的交互模式,直接通过命令来执行代码。
同时,它也能够向java那样编译后生成.class文件,然后运行.class文件来执行scala程序:
-
打开记事本,并添加上面代码。
-
将文件保存为:HelloWorld.scala。
-
打开命令提示符窗口,然后转到保存程序文件的目录。假设它是 D:>
-
键入“scalac HelloWorld.scala”,然后按回车编译代码。如果代码中没有错误,命令提示符下将自动换到下一行。
-
上面的命令将在当前目录中生成几个类文件。其中一个名称为HelloWorld.class。这是一个字节码可以运行在Java虚拟机(JVM)。
-
现在,键入“scala HelloWorld”来运行程序。
-
可以看到“Hello, World!”打印在窗口上。
object HelloWorld {
/* This is my first java program.
* This will print 'Hello, I am HappyBKs' as the output
*/
def main(args: Array[String]) {
println("Hello, I am HappyBKs!") // prints I am HappyBKs
}
}