在最底层,Java中的数据都是使用操作符来操作的
使用Java操作符
- 操作符作用于操作数,生成一个新值。
- 有些操作符可能会改变操作数自身的值,这被称为“副作用”。
优先级
一个表达式中同时存在多个操作符时,操作符的优先决定了各部分的计算顺序。可以使用()来明确规定计算顺序。
赋值
- “=”表示。
- 取右边的值复制给左边。右值可以是任意常数、变量、或表达式,只要能产生一个值就可以。左值:必须是一个明确的已命名的变量。
别名现象
在程序中操作的是对像的引用,一个对象可以用多个都不同的引用。
例:
Object a, b 两个引用指向的是同一个对象。操作a引用改变了对象的某个状态。在操作b引用来获取对象的刚通过操作a引用修改的状态的值是修改后的值。
注意传值和传址的不同。
算数操作符
- “+”表示加。
- “-”表示减。
- “*”表示乘。
- “/”表示除。整数除法会直接去掉结果的小数位,即取模。
- “%”表示求余。从整数除法中产生余数。
自动递增和递减
- “++”表示递增。i++ 先产生值在自加;++i 先加在产生值。
- “- -”表示递减。i - -先产生值在自减;- - i 先减在产生值。
关系运数符
关系运数符计算的是操作数的值之间的关系,产生一个boolean值。
- “<”小于,操作数为基本数据类型,boolaen除外。
- “>”大于,操作数为基本数据类型,boolaen除外。
- “<=”小于等于,操作数为基本数据类型,boolaen除外。
- “>=”大于等于,操作数为基本数据类型,boolaen除外。
- “==”等于,适用于所有的基本数据类型。
- “!=”不等于,适用于所有的基本数据类型。
注:==和!= 操作数为基本数据类型时,比较的是内容,若操作数为对象的引用时,比较的是引用而不是对象的内容。如果想比较对像的内容需要使用epuals()方法。
逻辑操作符
逻辑运算符更具操作数的逻辑关系产生一个boolaen值。操作数只能是boolean值。
- “&&”与,一flase则flase。
- “||”或,一true则true。
- “!”非,取反。
短路现象:一旦能明确无误的确认整个表达式的值,就不在计算吧表达式的余下部分。
按位操作符
按位操作符用来操作整数基本数据类型中的单个“bit”。对两个操作数中对应的位执行布尔代数运算,并最终生成一个结果。
- “&”与
- “|”或
- “^”异或
移位操作符
移位操作符操作数只能是整数的基本数据类型。
- “<<”左移,低位补0。
- “>>”右移,带符号的右移,所以高位补符号位。
- “>>>”无符号右移,高位补0。
如果对char、byte、short进行以为操作,在移位之前他们会被转换成int类型,并且得到的结果也是一个int类型的值。只有数值的低5位才有用。防止我们移位超过int型值所具有的位数。对一个long类型的数值进行处理,得到的也是long,但数值的有段的低6位才有效,防止移位超过long型数值具有的位数。
三元操作符
boolean-eep ? value0:value1
字符串操作符
- “+”连接字符串。
类型转换操作符
- 窄化转型:有信息可能会丢失的危险。
- 扩展转型:信息不回丢失。
截尾
将float和double的数值转换为int型值时,总时对该数字直接结尾。
例:
27.4 和27.7 转换成int类型值时,转换后的值为27。
舍入
如果想要四舍五入,则需要使用java.lang.Math中的round()方法。
提升
- 如果对基本数据类型执行算术运算和按位运算,只要类型比int小的(byte,char,short)在运算前都后先自动转换成int型,最后计算的结果就是int型。
- int + long = long
- int * float = float
- float * long = long