scala学习之scala与java的一些区别(一)
2016-05-29 20:59
411 查看
关键字:
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"
注意:可用但可读性不好
赋值:
和Python一样方便的赋值方式:
val x,y = 0 // 赋同一初始值
val (x,y) = (10, "hello") // 同时定义多个变量,注意:val x,y=10,"hello" 是错误的
更花:
val x::y = List(1,2,3,4) // x = 1, y = List(2,3,4)
val List(a,b,c) = List(1,2,3) // a = 1, b = 2, c = 3
进一步花样:
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, Double, 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,2,3)
或者
List("1","2","3") map Integer.parseInt // List(1,2,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-30:james
is 30.
"%2$d age's man %1$s: %2$d" format ("james",
30) // 30 age's man james: 30
==和eq
Scala的==很智能,他知道对于数值类型要调用Java中的==,ref类型要调用Java的equals()
在java中为false,在scala中为true
参考:http://blog.csdn.net/lyrebing/article/details/19835461
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"
注意:可用但可读性不好
赋值:
和Python一样方便的赋值方式:
val x,y = 0 // 赋同一初始值
val (x,y) = (10, "hello") // 同时定义多个变量,注意:val x,y=10,"hello" 是错误的
更花:
val x::y = List(1,2,3,4) // x = 1, y = List(2,3,4)
val List(a,b,c) = List(1,2,3) // a = 1, b = 2, c = 3
进一步花样:
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, Double, 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,2,3)
或者
List("1","2","3") map Integer.parseInt // List(1,2,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-30:james
is 30.
"%2$d age's man %1$s: %2$d" format ("james",
30) // 30 age's man james: 30
==和eq
Scala的==很智能,他知道对于数值类型要调用Java中的==,ref类型要调用Java的equals()
在java中为false,在scala中为true
参考:http://blog.csdn.net/lyrebing/article/details/19835461
相关文章推荐
- Java NIO - CyclicBarrier
- eclipse里设置JavaDoc
- 实现JAVA程序编程--->转成.exe格式
- Javaworkers团队第三周项目总结
- 2. Add Two Numbers(Java)
- eclipse中不能找到dubbo.xsd解决方法
- Ext智能提示 - Spket(Eclipse插件)
- win10 中eclipse 使用hadoop-eclipse-plaus.jar插件 Unable to establish loopback connection
- java实现提取中文的首字母
- java线程池
- ubutu安装配置jdk1.8
- 轻松搞定java内存模型(四)垃圾回收算法
- 《疯狂Java讲义》——解释型语言和编译型语言
- JAVA 继承、方法重写、多态学习笔记
- java线程操作 sleep wait start wait 等
- eclipse常用的字体
- JSON for java入门总结
- 深入理解Java ThreadLocal
- 《Java 8函数式编程》 读书记录
- 菜鸟的Java之旅--JVM