Scala学习笔记——scala数据类型
文章目录
一、Hello World
老规矩,学新语言先写hello world
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World!")
}
}
这里与java语言不同的是,java是新建一个类,而scala是新建一个object
二、数据类型与变量的定义
1、数据类型
Byte 8位有符号补码整数。
Short 16位有符号补码整数。
Int 32位有符号补码整数。
Long 64位有符号补码整数,定义时要在数字后加 l 或 L。
Float 32 位, IEEE 754 标准的单精度浮点数,定义是要在数字后面加 f 或 F。
Double 64 位 IEEE 754 标准的双精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。相当于java中的void
Null null 或空引用,相当于java中的null
Any Any是所有其他类的超类,相当于java中的object
2、变量的定义
scala定义变量要使用val或var关键字
- 语法:val | var 名称 (: 数据类型) = 变量值
val与var的区别:
- val修饰的变量值不能修改,相当于java中的final修饰的变量
如:
def main(args: Array[String]): Unit = {
//字符串
var str: String = "tyh"
//整型
var i: Int = 123
var l: Long = 2233720368547L
//浮点型
var f: Float = 1.23434f
var d: Double = 1.234324
//多个变量的声明
val name1, name2 : String = "tyh"
//修改val变量会报错
//name1 = "yyx"
var c: Char = 'a'
var bool: Boolean = true
//Null null 或空引用
var dog : Dog = null
}
class Dog {}
三、打印数据到控制台
三种字符串打印方式
def main(args: Array[String]): Unit = {
var name: String = "lihua"
var price: Int = 5000
var d: Double = 500.562165
var url: String = "1579152915@qq.com"
//1、普通输出:可以使用加号连接也可以使用,连接(,是可以输出的)
println("name:" + name , "价格" + price + ",网址" + url)
println("name:" + name , "价格" + price , "网址" + url)
//2、'f'插值器允许创建一个格式化的字符串,类似于C语言中的printf。
//这里$name%s打印String变量name,
println(f"姓名:$name,价格:$d,网址:$url%s")
//3、's'插值器允许在字符串中直接使用变量
println(s"姓名:$name,价格:$price,url:$url")
//'s'还可以处理表达式
println(s"价格:${price + d}")
}
输出:
四、类型转换
1、隐式转换
多种类型数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,然后进行运算
def main(args: Array[String]): Unit = {
//1、隐式转换:多种类型数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,然后进行运算
var val1: Float = 1.1f + 1
var val2: Int = 'a' + 1
println(val1, val2)
}
输出:
2、强制类型转换
def main(args: Array[String]): Unit = {
var price: Int = 50
val val3: Double = price.toDouble
val val4: Double = price.doubleValue()
//这两个方法都不会改变price原来的值
println(price)
var str: String = "124"
val price2: Int = Integer.valueOf(str)
println(price2)
//其它类型转字符串,使用String.valueOf()方法
val str2: String = String.valueOf(price)
val array: Array[Char] = str.toCharArray
}
总而言之,要将一个数据类型转换为另一种数据类型(String除外),就直接类型一.to类型二
五、scala运算符
与java一样
1、算数运算符
def main(args: Array[String]): Unit = {
var a = 10;
var b = 20;
//1、算数运算符
println("a + b = " + (a + b))
println("a - b = " + (a - b))
println("a * b = " + (a * b))
println("a / b = " + (a / b))
println("a % b = " + (a % b))
}
输出:
2、关系运算符
def main(args: Array[String]): Unit = {
var a = 10;
var b = 20;
//2、关系运算符
println("a == b = " + (a == b))
println("a != b = " + (a != b))
println("a > b = " + (a > b))
println("a < b = " + (a < b))
println("b >= a = " + (b >= a))
println("b <= a = " + (b <= a))
}
输出:
3、逻辑运算符
def main(args: Array[String]): Unit = {
var c = true
var d = false
println("c && d =" + (c && d))
println("c || d =" + (c || d))
println("!(c && d) =" + !(c && d))
}
输出:
4、位运算符
&: 按位与运算符 (a & b) 输出结果 12 ,二进制解释: 0000 1100
|: 按位或运算符 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^: 按位异或运算符 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~: 按位取反运算符 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<: 左移动运算符 a << 2 输出结果 240 ,二进制解释: 1111 0000
>>: 右移动运算符 a >> 2 输出结果 15 ,二进制解释: 0000 1111
>>>: 无符号右移 A >>>2 输出结果 15, 二进制解释: 0000 1111
def main(args: Array[String]): Unit = {
var a = 60 /* 60 = 0011 1100 */
var b = 13 /* 13 = 0000 1101 */
var e: Int = 0
e = a & b /* 12 = 0000 1100 */
println("a & b = " + e)
e = a | b /* 61 = 0011 1101 */
println("a | b = " + e)
e = a ^ b /* 49 = 0011 0001 */
println("a ^ b = " + e)
e = ~(a) /* -61 = 1100 0011 */
println("~a = " + e)
e = a << 2 /* 240 = 1111 0000 */
println("a << 2 = " + e)
e = a >> 2 /* 15 = 1111 */
println("a >> 2 = " + e)
e = a >>> 2 /* 15 = 0000 1111 */
println("a >>> 2 = " + e)
}
输出: