当前位置:嗨网首页>书籍在线阅读

26-一元运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.7.1 一元运算符

一元操作符主要分为一元前缀操作符和自增自减操作符。

1.一元前缀操作符

对于表4-7的表达式+a来说,编译器处理流程如下。

表4-7 一元前缀操作符重载

| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | +a | a.unaryPlus() | | -a | a.unaryMinus() | | !a | a.not() |

(1)确定a的类型,令其为T。

(2)为接收者T查找带有operator修饰符的无参函数unaryPlus(),即成员函数或扩展函数。

(3)如果函数不存在或不明确,则产生编译错误。

(4)如果函数存在且其返回类型为R,那就表明表达式+a具有R类型。

2.自增自减操作符

自增自减操作符分为自增(++)和自减(--)两种运算符,使用自增自减操作符可以有效地简化代码,在Kotlin中,对应的转换方法如表4-8所示。

表4-8 自增自减操作符重载

| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | a++ | a.inc() | | a-- | a.dec() |

对于表4-9的表达式a++来说,编译器处理流程如下。

(1)确定a的类型,令其为T。

(2)查找一个适用于类型T的接收者,同时带有operator修饰符的无参数函数inc()。

(3)检查函数的返回类型是否为T的子类型。

自增和自减运算符可以放在变量的前面或者后面,其执行结果大相径庭。代码如下。

var  a=5
println(a++)    //输出5
println(++a)     //输出7

自增自减运算符放在变量的前面,如++a,表示先执行运算再使用生成的值;放在变量的后面,表示先使用值再进行运算。