-变量:在程序执行过程中,其值可以改变
-常量:在程序执行过程中,其值不可以改变
-Java
>变量
数据类型 变量名 = 值
int a = 10
>常量
final 数据类型 变量名 = 值
-Scala
>变量
var 变量名:数据类型 = 值
var a:Int = 10
>常量
val 变量名:数据类型 = 值
val a:Int = 10
//(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
var a = 10 //默认整形为Int、默认浮点型为Double
println(a)
//(2)类型确定后,就不能修改,说明Scala是强数据类型语言
var a:Int = 10
a = "abc" //错误用法,数值型不可以转换为字符串
//(3)声明变量时,必须要有初始值()
//Java中局部变量需要初始化,成员变量有默认值
var a:Int //错误用法,没有初始化
println(a)
//(4)在声明定义一个变量时,可以使用var或者val来修饰,var修饰的变量可以改变,val修饰的变量不可以改变
var a:Int = 10
val b:Int = 20
a = 30
b = 40 //b的类型为常量不可以改变
//(5)var修饰的对象引用可以改变,val修饰的对象则不可以改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
var student1 = new Student
student1 = new Student() //错误用法
val student2 = new Student
student2 = new Student()
student1.name = "lisi"
student2.name = "lisi"
//(6)在实际开发的过程中,优先选择var和val中的谁?
//优先选择val(val用的多一点)
val s:String = "abc"
2.3 标识符的命名规范
定义:凡是可以自己命名的地方都叫标识符
(1)以字母或者下划线开头,后接字母、数字、下划线
(2)以操作符开头,且只包含操作符(+ - * / # !等)
(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以
package, import, class, object, trait, extends, with, type, for
private, protected, abstract, sealed, final, implicit, lazy, override
try, catch, finally, throw
if, else, match, case, do, while, for, return, yield
def, val, var
this, super
new
true, false, null
// (1)以字母或者下划线开头,后接字母、数字、下划线
var hello: String = "" // ok
var Hello12: String = "" // ok
//var 1hello: String = "" // error 数字不能开头
//var h-b: String = "" // error 不能用-
//var x h: String = "" // error 不能有空格
var h_4: String = "" // ok
var _ab: String = "" // ok
//var Int: String = "" // ok 因为在Scala中Int是预定义的字符,不是关键字,但不推荐
var _: String = "hello" // ok 单独一个下划线不可以作为标识符,因为_被认为是一个方法
//println(_)
//(2)以操作符开头,且只包含操作符(+ - * / # !等)
var +*-/#! : String = "" // ok
//var +*-/#!1 : String = "" // error 以操作符开头,必须都是操作符
//(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以
//var if : String = "" // error 不能用关键字
var `if` : String = "" // ok 用反引号`....`包括的任意字符串,包括关键字
def sayOk : Unit = {// unit表示没有返回值,即void
}
println(sayOk)
//null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)
var cat = new Cat();
cat = null // 正确
var n1: Int = null // 错误
println("n1:" + n1)
2.7 类型转换
2.7.1自动类型转换
(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
var b1:Byte = 10
var n:Long = 20L
var res = n + b1
(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
var b:Byte = 10
var n:Int = b //将精度小的数据赋值给精度大的数据,会自动类型转换(隐式转换)
var b1:Byte = n //将精度大的数据赋值给精度晓得数据,报错
(3)(byte,short)和char之间不会相互自动转换。
var b:Byte = 10
var c:Char = b
val c:Char = 96
val n:Int = c
(4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
var b:Byte = 10
var s:Short = 20
var c:Char = 30
val i = b + s + c
// (1)将数据由高精度转换为低精度,就需要使用到强制转换
var n:Int = 2.5.toInt
println(n)
// (2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
var n:Int = 2.5.toInt +3.6.toInt
var n:Int = (2.5 + 3.6).toInt
2.7.3 数值类型向String转换
//数值类型和String类型间转换
//数值---->字符串
var n = 10 + ""
//字符串----->数值
var res = "12.3".toInt //报错NumberFormatException
println(res)
var res = "12.3".toDouble.toInt
println(res)