Thinking in Java 第三章 操作符

第三章 操作符

除了 + – * / , Java还支持 += , ++, — 等操作,运算符 = 、==、 !=
它们有一定的优先级,如果不清楚优先级建议使用小括号明确规定运算顺序。

算术操作符 +,-,*,/

赋值 =

需要注意的是,除了基本类型中,其他对象赋值只是将一个引用给了另一个变量,它们都是指向同一个对象,这种现象叫做“别名现象”。同样在方法传递的时候,如果传进去得是一个对象,那么不是复制对象,而是传了一个引用进去,方法对这个引用的修改会使这个对象在方法外面同样发生改变。引用有点类似于C++的指针操作。

自增自减操作 ++ ,–

需要注意的是++和–可以放在变量的前面和后面,例如 i++和++i,i++表示先得到i值再i增加1并赋值到i,++i表示先把i增加1赋值i再进行其他操作,在单句使用的时候 ,并没有明显的差异。但是在复合语句中就有不同了,例如简单的语句,当 i = 0时,a = i++,得到的结果是 a = 0,i= 1;如果是a = ++i,得到的结果是 a =1,i= 1。(这里和C++一样)

关系运算符 <, >, <= , >=, !=, ==

在Java的Object 对象中有一个equals方法,在对象比较时候,一般需要==和equals的区别,在默认的方法中,equals是比较引用的的,结果和==一样。但是在一些类中,equals是经过重写的,例如String中,equals是指内容一样就相等,而不需要是同一个引用。

逻辑运算符(与或非) &&, ||, !

  1. 注意 &&和&的区别,&是位运算。

  2. “短路”现象,就是在一个表达式中,如果已经确定了表达式的值就不再计算剩余的部分了。譬如 i = 1, j =2,表达式 (i>5 && j >0),在判断了i>5这里已经知道了这个式子后面无论是什么为false了,那么后面就不在计算了,已经没有意义了。那么计算和不计算无所谓么,不是的,因为后面的表达式可能有自增,赋值等运算,那么就有区别了。例如表达式(i>5 && j– >0),那么得到的j还是2,因为后面j–,由于短路现象并没有计算。

常量和指数计算法

int i = 0x2f; 十六进制
int i = 0177; 八进制
long i = 100l; 长整型
float = 1.3e-12f; 指数计数法(后面的f是必须的,默认浮点数是双精度double类型,不能自动转为单精度float)

位运算 &, ~, ^

额外操作 &=, !=,^=

移位操作 <<, >>

<< 左移,对变量二进制向左移动指定的位数,低位补0

>> 右移,对变量二进制向右移动指定的位数,符号位保持不变,其他的高位补零

>>>无符号右移,主要区别是无论正负,高位都是补零

三元操作符

条件 ? 值1:值2; 如果条件为true,则返回值1,否则,返回值2.

类型转换(cast)

  1. 在低精度赋值到高精度是会自动转换的,但是高精度到低精度赋值,需要手动转换,并且会有信息丢失的风险。

  2. 把浮点数转为整型,会进行舍尾操作,如果需要四舍五入,可以使用Math.round函数。

  3. 在计算表达式时,会自动把低精度转为高精度计算,得到的结果也是高精度的,类型比int小的会转为int运算,因此计算之后赋值到低精度变量,需要类型转换

关注我的公众号

只说一点点点点

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据