哎,运算符忘记写了。先做个目录。
一、算术运算符
1、 加 : +
2、减 : -
3、乘 : *
4、取整: /
5、 取余 : % (涉及到正负号的,以左边操作数为准)
7、递增 : ++
8、递减 : –
public static void main(String[] args) {
int a = 5;
int b,c,d,f,g,h;
b = +a; //正值
System.out.println("b = "+b + "; a = "+a );
c = -a ; //负值
System.out.println("c = "+c + "; a = "+a);
int l = 2;
d = ++l; // 先 l = l+1,再d = l
System.out.println("l = "+l + "; d = "+d);
int m = 3;
f = m++; // 先 f = m,再 m = m+1
System.out.println("m = "+m + "; f = "+f);
int n = 4;
g = --n; // 先 n = n-1,再 g = n
System.out.println("g = "+g + "; n = "+n);
int o = 6;
h = o--; // 先 h = 0,再 o = o-1
System.out.println("o = "+o + "; h = "+h);
// 取整
int x = 10;
int y = 3;
int integer = x/y; //注意: 除数不能为0.否则会报算术异常
int remainder = x%y;
System.out.println("取整:"+integer+"; 取余 = "+remainder);
//取整,除数不能为0。但是,如果分子是double时,分母为0是正确的,只不过得到的值是无强大 Infinity
double z = 10.0;
System.out.println(z/0);
/** 当二元运算的两个操作数的数据类型不同时,
* 运算结果的数据类型和参与运算的操作数的数据类型中精度较高
* 转换原则: 低精度到高精度会自动转换,而高精度到低精度则要类型强制转换
* byte 、short、int、long、float、double 从左往右
* char 的精度比int 低
* 注意事项:
* 1) 两个char型运算时,自动转换为int型;
* 当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;
* 2) "数据晋升" : byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;
*/
// 自动转换
double doubleValue = 10.0;
int interValue = 5;
System.out.println("自动转换:"+(doubleValue+interValue));
// 强制转化
int forceTrans = (int)doubleValue;
System.out.println("强制转换:"+forceTrans);
}
注意这么一个例子 :
short s = 4;
s = s + 5 ; // 这样写是错误的,编译不会通过,原因:s会被自动提升成int类型,运算结果是int 类型,无法赋值给short 类型。
s+=5; // 编译通过,因为+= 运算符在给s赋值时,自动完成了强转操作。
.
.
二、关系运算符
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。
1、等于 : ==
2、不等于 : !=
3、大于 : >
4、小于 : <
5、大于等于 : >=
6、小于等于 : <=
三、逻辑运算符
1、与 : &&
2、或 : ||
3、异或 : ^
4、简化或 : |
5、简化并: &
6、非 : !
短路现象: &和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能(是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止)。
举个例子 : 对于&来说,如果左侧条件为false,也会计算右侧条件的值
而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
注意 : 异或(^)相同为false,相反则为true。
.
.
.
四、位运算符
1、按位取反运算 : ~
2、按位与 运算: &
3、按位或 运算 : |
4、按位异或运算 : ^
5、右移 : >> (其实就是除以以2的移动的位数次幂)
6、无符号右移 0 填充 >>>
7、左移 : << (其实就是乘以2的移动的位数次幂)
例如 : 6 << 2 = 6 *2^2 = 24
6 >> 2 = 6 / 2^2 = 1;
由此可见 : 左移 变大,右移变小。
位运算比基本运算符高效。
点击查看位运算符
五、条件运算符(三目运算符)
a = 布尔表达式 ? 为true时所赋予的值 : 为false 是所赋予的值
例如 : 取整数 a,b 的最大值
int x = a > b ? a : b;
.
.
.
六、赋值运算符
1、= :
2、+= : 对于 x+= y 等效于 x= x+ y
3、 -= : 对于x-= y 等效于 x = x- y
4、>= : 对于 x *= y 等效于 x = x*y
5、/= : 对于 x /= y 等效于 x = x /y
6、%=: 对于 x%= y 等效于 x = x%y
7、&= : 对于x &= y 等效于 x = x & y
8、| = : 对于 x |= y 等效于 x = x | y
9、^= 对于 x ^= y 等效于 x = x ^y
10、 <<= : 对于 x <<= y 等效于 x = x << y
11、 >>= : 对于 x >>= y 等效于 x = x >> y
12、>>>= : 对于 x >>> = y 等效于 x = x >>> y
.
.
.
七、运算符的优先级
.
.
八、书写运算符注意事项
1、 不要把表达式写得过于复杂,如果一个表达式过于复杂,则 把他分成几步完成 。
2、不要过多依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号()来控制表达式的执行顺序。
给一道经典面试题,交换a,b的值。
方法一:
int temp;
temp = a;
a = b;
b = temp;
方法二 : (如果a,b数值非常大,容易超出int 范围)
a = a + b;
b = a - b;
a = a - b;
方法三 :
n = n ^m;
m = n ^m; // (n^m) ^m = n
n = n ^m; // n ^(n^m) = m