输出,变量
一.输出的三种方式
val name = "ApacheCN" val height = 180.001 val weight = 118.18 println("name=" + name + " height=" + height + " weight=" + weight) printf("name=%s, height=%.3f, weight=%.1f \n", name, height, weight) //默认小数点6位 println(s"name=$name, height=${height-5}, weight=$weight-3")//注意有无大括号的区别
二.变量
var/val VariableName : DataType [= Initial Value]
数据类型
类型可以自动推导,但是不同于动态类型语言,类型确定后就不能更改,强数据类型语言
val name = "ApacheCN";name = 10 报错
类型的种类

(1) Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型)
(2) 在scala中数据类型都是对象(其实scala中一切对象皆是对象,例:10.toString),也就是说scala中没有java中的原生类型(即8中基本类型).例如:java中: int i = 10; i.toString();报错,因为i是基本数据类型,没有方法
(3)三句话:整型默认为Int,小数默认为Double,右侧是计算式子时考虑int类型
val b:Byte = 10 (不报错,因为右侧为单个数值,只考虑越界,不考虑整型默认为Int) val s:Short = 20 val s1:Short = b + s (报错,可能我们会想,byte + short取最大类型short,但是右侧是式子,考虑数值的默认类型为Int,取最大类型是有前提的) val c:Char = b;/val c1:Char = s; (报错,看图)
注:和java的是有一点区别的:'右侧是计算式子时考虑int类型'在java中不是那么绝对
byte b = 10 +20; 正确的 byte b1 = b + b; 错误的
var与val
var变量,变量值可变,val常量,变量值不可变,这里的val不像python中的那样,即使是常量值也可以发生改变
val dog = new Dog;dog = new Dog;报错 val age = 10 var name = "hello" 反编译查看 private final int age; private String name;
初始值
两者都必须要有初始值,不像java声明时不赋值,会在初始化时赋初始值(有点不理解菜鸟教程上为啥[= Initial Value]要写中括号)
val name;报错
如果使用占位符,必须指定数据类型
var name = _;报错 var name:String = _;此时name的值为null
注
①scala设计者推荐我们使用val,因为val没有线程安全问题,效率高
②Unit类型、Null类型和Nothing类型
| Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 | 
| NULL | null , Null 类型只有一个实例值 null | 
| Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 | 
Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
Unit类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit类似于Java里的void。Unit只有一个实例,(),这个实例也没有实质的意义
Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。
类型转换
在scala中,无论是强制类型转换还是String与数值类型之间的转换都是toxxx
在java中,强制类型转换使用(),String与数值类型之间的转换,转换成何种类型就找这个类型对象的valueOf或者parsexxx方法
"12.5".toInt 这个是错误的
标识符
首字符为操作符(比如+ - * / ),后续字符也需跟操作符 ,至少一个(反编译)。操作符(比如+-*/)不能在标识符中间和最后,以其他非操作字符作参考。
var ++ = 12 //反编译$plus$plus
Byte,Char,Short,Int,Double等在scala中,不是关键字,而是预定义标识符,可以用,但是不推荐
var Float = 12.5
print(Float)
_不可以用作标识符,因为在scala中,_ 有很多其他的作用,因此不能使用
var _ =12.5 //不会直接报错,但是无法输出啊
运算符
算术运算符
①/ -> 10/3与10.0/3
②% -> a%b= a-a/b*b
③++ --在scala中不存在 
println(10/3) //3 println(10/3.0) //3.3333333333333335 println(10 % 3) //1 println(-10 % -3) //-1
位运算符
使用异或运算符来交换两个变量的值
var a = 3;var b = 5 a = a ^ b b = a ^ b a = a ^ b print(a,b)

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号