1基本数据类型
只要是java的基本数据类型,Scala都支持。不过Scala中的数据类型都是对象,这些基本类型都可以通过隐式自动转化的形式支持更多的方法。隐式自动转换的概念简单的就是,为基本类型提供扩展,比如(引路蜂例子),调用(-1).abs(),-1是Int型,基本类型Int步支持abs方法的,那么Scala就会把-1转化成RichInt类型,然后调用RichInt类型的abs方法。
基本数据类型有:
Byte,Short,Int,Long,char,Double,Float,String.
除了String在java.long包保重,其他都在scala中,比如scala.Int。
在scala运行时,自动加载scala和java的数据类型,可以随便使用。
以前也说过,由于scala支持类型推断,不用显示的指明数据类型,可以通过scala运行自动给出变量的类型。
//Byte,不要问问为什么byte不自动推断,我不知道哈
val p1:Byte=5
//Int
val p2 = 5
//float
val p3=5.11
//char
val p4='A'
//String
val p5="string"
还有要注意一点是,不是变量也可以调用方法,以前我们说过Scala把任何东西都看成对象。一般的数字或着值都可以调用方法。
(-5).abs
println((-5).abs)
这点和java不同。
2操作数据类型
Scala提供了很多运算符来操作基本数据类型,这些运算符,其实是方法的简化,比如1+2,实际上为(1).+(2),也就是1调用Int类型的名叫+的方法。Scala就是这么任性。还提示我们
println(1+2)
println((1).+(2))
实际上Int类型重载了很多方法,支持不同类型的方法。
在比如,String的方法indexof,可以使用方法的形式使用,也可以使用运算发的方式使用。
println("String".indexOf("t"))
println("String" indexOf "t")
结果是一毛一样的,第二个indexOf 其实就是当作运算符来使用的。所以说运算符其实就是一个方法的简化。
刚才说的+,是中缀运算发,就是+两步都是值的,也有前缀运算发和后缀运算符。-6中的-就是前缀运算符,后缀就是我们刚刚说的 indexOf。Scala在实现前缀和后缀操作符的时候,方法的名称都是以unary_开头的。
println(-5)
println((5).unary_-)
在Scala中你调用方法时可以省略空格号,如果你想调用该方法的没有参数的方法时。比如下面:
println( "afa".toLowerCase)
println( "afa" toLowerCase)
前缀操作符有:+,-,!和~
算法运算符:+-*/
关系:<,>,=,!等
如果需求比较两个对象是否相等,可以使用==和!=操作符,这点和java中的==不同,scala中,只能比较两个对象值是否相同。对于类型的比较使用eq和ne。
scala操作符优先级和java一样,如果 困惑时,请使用()来改变优先级。scala中的操作符一般是左结合,但是以:结尾时,就是右结合。