Scala变量和数据类型
一、注释及代码规范
- Scala的注释和Java中完全相同:单行注释:// 、多行注释:/* */ 以及文档注释:/** */;
- 使用tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移 。或是ctrl + alt + L来进行格式化;
- 运算符两边习惯性各加一个空格;
- 一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅 ;
- Scala与Java的命名规范基本一致,Scala还允许纯操作符的命名形式(操作符(+ - * / # !等),如:var +*-/#! : String = ""。以及反引号包含39个关键字的形式,如:var `if` : String = ""。
二、变量和常量
Java中:
变量类型 变量名称 = 初始值 int a = 10
final常量类型 常量名称 = 初始值 final int b = 20
Scala中:
var 变量名 [: 变量类型] = 初始值 var i:Int = 10
val 常量名 [: 常量类型] = 初始值 val j:Int = 20
注:
1、声明变量类型可以省略,编译器会自动推导;
2、Scala中类型确定后就不能改变了,Scala是强类型语言;
3、变量声明时必须要有初始值;
4、var修饰的对象引用可以改变,val则不可以改变,但对象的状态可以改变(比如;自定义对象、数组、集合等)
object VarTest { def main(args: Array[String]): Unit = { //var 修饰的对象属性可变,p1对象本身也可变 var p1 = new Person(); p1.name ="zhangsan" p1 = null //val 修饰的对象不可变,但属性可变 val p2 = new Person() p2.name = "lisi" //p2=null 程序错误 } } class Person{ var name:String = ""; }
三、字符串操作
1、字符串拼接与java相同,使用“+”连接;
2、println的输出中,通过“%”进行传值;
3、在字符串模板中,通过${}获取变量值。
4、在多行字符串中,应用Scala中的stripMargin方法,使用三个双引号包围以.stripMargin结尾,中间换行使用“|”。
示例代码:
object CharTypeTest { def main(args: Array[String]): Unit = { var name : String = "zhangsan" var age : Int = 18 //字符串拼接 println("name=" + name +","+"age" + age) println("name=%s,age=%d",name,age) //多行字符串输出 val s = """ |I |love |China |""".stripMargin println(s) //通过$传值 val s1 = s""" |select * |from person |where name="$name" and age=${age+2} |""".stripMargin println(s1) } }
四、键盘输入
java中:
Scanner input = new Scanner(System.in); System.out.println("输入姓名:"); String name = input.next(); System.out.println("输入年龄:"); int age = input.nextInt();
Scala中:
object InputTest { def main(args: Array[String]): Unit = { println("输入姓名:") var name:String = StdIn.readLine() println("输入年龄:") var age:Int = StdIn.readInt() } }
五、数据类型
Java中:
基本类型:byte、short、int、long、float、double、char、boolean;
引用类型:对象类型。
Scala中:
- Scala中一切数据都是对象,都是Any的子类;
- 数据类型分为两大类,数值类型(AnyVal)、引用类型(AnyRef);
- Scala依旧遵守低精度类型向高精度类型自动转换(隐式);
- Scala中的StringOps是对Java中String的增强;
- Scala中的Unit无返回类型等价于Java中的void,但void只是关键字,而Unit依旧是数据类型且包含一个对象();
- Null也是一个类型,只包含一个对象null;
- Noting是一切数据类型的子类,主要用于一个函数没有明确返回值时使用。
- Scala中的整数类型有:Byte、Short、Int、Long;
- 浮点类型:Float、Double;
- 字符型:Char;(单个字符使用单引号'');
- 布尔型:Boolean;
六、类型转换
6.1 隐式转换
当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
6.2 强制转换
Java:
double a = 2.2; int b = (int) a;
Scala:
def main(args: Array[String]): Unit = {
//注意:toInt只针对最近的操作数有效,所以往往要配合小括号使用 var a:Int = 2.7.toInt }
String类型转基本类型:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort。