Scala学习笔记三

第五章 基本类型和操作

5.1 基本类型

一些基本类型

注意:在scala中基本类型小写或者大写都是一个意思,例如int和Int,最后都转化为Scala.Int。后续可能不支持小写,推荐使用大写开头。Scala编译器能直接把Scala值类型在它产生的字节码里转义成Java的原始类型。

5.3 操作符与方法

  前面提到过,1 + 2与(1).+(2)其实是一回事。换句话说,就是Int类包含了叫做+的方法,它带一个Int参数并返回一个Int结果。另外,Int包含了许多带不同的参数类型的重载:overload的+方法。例如,Int还有另一个也叫+的方法参数和返回类型为Long。如果你把Long加到Int上,这个替换的+方法就将被调用。
  操作符标注不仅限于像+这种其他语言里看上去像操作符一样的东西,其实任何方法都当作操作符来标注。查看如下代码:

scala> val s = "Hello, world!" 
s: java.lang.String = Hello, world!    
scala> s indexOf 'o' // Scala调用了s.indexOf(’o’) 
res0: Int = 4
scala> s indexOf ('o', 5) // Scala调用了s.indexOf(’o’, 5) 
res1: Int = 7

  除了中缀操作符还有前缀(如“+”,“-”,“!”,“~”)和后缀操作符(如“toLong”)。前缀实际上调用了“unary_”。例如-2.0实际上调用了”(2.0).unary_-“。
  后缀操作符是不用点或括号调用的不带任何参数的方法。Scala里,你可以舍弃方法调用的空括号。例外就是如果方法带有副作用就加上括号,如println(),不过如果方法没有副作用就可以去掉括号,如String上调用的toLowerCase。
  所谓”副作用”(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。

5.7 对象对等性

  scala中的“==”除了可以作用于基本类型,也可以作用于所有对象。“==”两端的可以是相同类型,也可以是不同类型,甚至可以比较null或者任何可能为null的东西,而不会抛出异常。
  scala中的“==”比较过程是:先判断左边是否为null,如果不是则调用equals方法。equals方法的精度取决于“==”左边的参数。Scala中不同类型判断“==”可能会得到true的结果。比如“1.0 == 1”的结果为true;“(“he”+”llo”)==”hello”结果为true。因为在有些类型里重写了equals方法,使得比较的是它们的内容而不是引用的对象。

5.8 操作符的优先级和关联性

操作符优先级

  Scala基于操作符格式里方法的第一个字符决定优先级。但有一个例外:如果操作符以等号字符(=)结束,且操作符并非比较操作符<=,>=,==,或=,那么这个操作符的优先级与赋值符(=)相同。也就是说,它比任何其他操作符的优先级都低(如:“*=”,“+=”)

5.9 富包装器

scala中每个基本类型都有一个富包装器,如下所示。富包装器中提供了更丰富的方法。调用这些方法可以通过隐式转换实现。
富包装类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值