简述scala语⾔与java语联系与区别_scala语⾔与java的区别scala⽀持关联映射,如可以⽤(key -> value)表⽰⼀个键值对
scala中的所有类型都是对象,包括基本数据类型
scala中的case语句⽤来判断接收的消息,⽐java中的更专注
receive{ case msg => action() }
scala⾏动类实现了线程之上的并发抽象,通过发送消息相互通信,每个⾏动类都⾃动维护⼀个消息队列,并且实现发送消息和接收消息的基本操作。
receriver ! msg
scala是静态类型的,也即在编译之前就需要确定参数的类型,与C++的参数化类型相似
scala包含两种类型的变量,val变量相当于java中的const,var则是常规变量
scala中的基本数据类型,来源于Java中对相应数据类型的类封装,String类型则相同
scala具有类型推断功能,在可由上下⽂推断的情况下,可以省略类型说明,如:val x = 4
scala通过def关键字定义函数,在缺省显式return语句的情况下,返回函数最后计算得到的值
scala采⽤println直接输出到标准输出,⽽不⽤System.out.println
scala中的数组索引是args(0),⽽⾮java中的args[0]
scala数组Array包含⽅法foreach(action),其中action是⼀个传⼊的函数,例如:x => println(x)
scala提供指令式:for(arg
scala中的所有操作符都是⽅法的调⽤,例如:1+2,等效于(1).+(2)
0 to 5,等效于(0).to(5),x(1)="scala",等效于(x).update(1,"scala"),x(1)等效于(x).apply(1)
scala通过定义伴⽣对象,分离静态成员,类似于java中的static关键字
scala Array数组中所有对象都具有相同类型,实例化后数组长度不能再改变,但是数组元素值可以改变
List数组中的元素值则不可改变,List有"::"实现叠加功能,操作符会创建⼀个新的List,List不⽀持append操作
scala包含新的容器对象Tuple,元组可以包含多个不同类型的对象,例如:val tp = (1,2,"scala"),中tp就是⼀个Tuple[Int,Int,String]对象,tp._1表⽰取第⼀个元素
scala中Set和Map类型有可变和不可变两种实现⽅式,分别保存在不同的包中
scala没有"++"操作符
scala提供trait关键字,描述对象的特质,类似于java中的接⼝interface
java switch case stringscala提倡函数式编程风格,减少var变量的使⽤,这样可以得到简洁可读性更强的代码
scala从⽂件中读取数据,Source.fromFile("filename").getLines()返回⼀个Iterator[String]对象
scala中的"=="操作符⽐较的是值的相等性,提供函数eq、ne⽐较引⽤的相等性
每个类都继承⾃Any,scala中“==”和equals相同,可以通过重写equals⽅法改变“==”的意义。类Any有两个⼦类,AnyVal和AnyRef。AnyVal是scala中内建值类的⽗类,Byte、Short、Char、Int、Long、Float、Double、Boolean、Unit,前⾯8个和java中的基本类型相对应。Unit⼤约相当于Java的Void类型,只有⼀个实例,写成()。在java平台上,AnyRef实际上就是java.lang.Object的别名。
scala类和java类的不同还在于其继承了⼀个名为ScalaObject的记号特质,⽬前为⽌ScalaObject只包含⼀个⽅法名为$tag,在内部使⽤以加速模式匹配。
Null类是null引⽤对象的类型,它是每个引⽤类的⼦类,Null不兼容值类型,不能把null赋给整数变量。Nothing类型在scala类层级的最底端,它是任何其他类型的⼦类型,然⽽根本没有这个类型的任何值,Nothing的⼀个⽤处是标明程序的不正常终⽌。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论