scala学习之scala与java的一些区别(一)
关键字: abstract case catch class def do else extends false final finally for if implicit import match new null object override package private protected requires return sealed super this throw trait try true type val var while with yield _ : = => <- <: <% >: # @
黄色是scala增加的,yield与java不同
Scala调用Java的方法时,会碰到有Scala的保存字,如Thread.yield() 这在Scala中是非法的,专门有个解决办法,写成: Thread.`yield`() 变量定义:这些标识在Java中是非法的,在Scala中是合法的,可以当作函数名使用,使接口更加DSL: val empty_? = true val + = "hello" val `yield` = 10 val ** = "power" 注意:可用但可读性不好 赋值: 和Python1样方便的赋值方式: val x,y = 0 // 赋同1初始值 val (x,y) = (10,"hello") // 同时定义多个变量,注意:val x,y=10,"hello" 是毛病的 更花: val x::y = List(1,2,3,4) // x = 1,y = List(2,4) val List(a,b,c) = List(1,3) // a = 1,b = 2,c = 3 进1步花样: val Array(a, b, _,_, c @ _*) = Array(1, 2, 3, 4, 5, 6, 7) // 也能够用List,Seq a // 1 b // 2 c // Array(5,6,7),_*匹配0个到多个 基本类型: Int,Long,Double,Byte,Short,Char,Float,Boolean 编译时Scala自动对应到Java原始类型,提高运行效力。Unit对应java的void 用 asInstanSEOf[T]方法来强迫转换类型: def i = 10.asInstanceOf[Double] // i: Double = 10.0 List('A','B','C').map(c=>(c+32).asInstanceOf[Char]) // List('a','b','c') 用isInstanceOf[T]方法来判断类型: val b = 10.isInstanceOf[Int] // true 注意:无++,--操作,但可以+=,-=, 以下: var i = 0 i++ // 报错,无此操作 i+=1 // 1 i-- // 报错,无此操作 i-=1 // 0 类型转换:101".toInt // 101,无需 Integer.parseInt("101"); "3.14".toFloat // 3.14f 101.toString 3.14.toString 转换全部列表: List("1","2","3") map (_.toInt) // List(1,3) 或 "my
name is %s,age is %d." format ("james",30) // my name is james,age is 30. 注意:format还可以这么用 "%s-%d:%1$s is %2$d." format ("james",30) // james⑶0:james is 30. "%2$d age's man %1$s: %2$d" format ("30 age's man james: 30 ==和eqScala的==很智能,他知道对数值类型要调用Java中的,ref类型要调用equals() 在java中为false,在scalatrue 参考:http://blog.csdn.net/lyrebing/article/details/19835461
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |