基本的数学运算符:+,-,*,/,%(余),++(自加),--(自减)
例:
byte by = 127; byte by1 = 127; System.out.println(by+by1); //输出254,byte的最大值是127,当运算后的值超过边界时,就会自动转换类型 byte by2 = (by+by1); //如:这句就会报错,强制转换后就不会得到向要的结果例:
int a = 3; double d = 3.3; double c = a+d; //输出6.3解析:
当a+b运算时,会先将整型的a转换为double类型的数据在进行运算
1.3整数的除法是整除
例:
int a = 9; int b = 5; System.out.println(a/b); //输出1,小数点后面的直接去掉,不会四舍五入注意的是:这三类数据进行运算时,都会先转换成int类型在进行运算
例:
char a = 'a'; char b = 'b'; char c = a+b; //这句会报错,需要强制类型转换 int i =a+b; //输出 195 ,应为char类型的其实是一个字符的Unicode编码值 byte by = 3; byte by1 = 3; byte by3 = by+by1; //这句会报错,需要强制类型转换 int by4 = by+by1; short s = 4; short s1 = 4; short s3 = (short) (s+s1); //将int型强制转换成short型啊,输出8java字面量的运算被javac优化。java中有个规则:字面量运算编译时要做优化
例:
int i = 7+4; //7和4就是字面量 //7+4编译时会自动加为11,之后才赋值给i*注意的是:
1,0对其它数的余数都是0;
2,n%3是周期函数,函数值[0,3)。
3,负数的余数是负数
例:
// 后++ int i = 3; int a = i++; //a=3,i=4 //解析 //i++是表达式 //1,先取出i的值3,作为i++表达式的值。所以a就等于3; //2,然后i这个变量会还是会自加1 System.out.println(a+","+i); //输出3,4 // 先++ int n = 5; int b = ++n; //b=6,n=6 //解析 //++n是一个表达式 //1,先n先自加n=6,在将n的值赋值给b System.out.println(b+","+n); //输出6,6*所以不管是++i,还是i++,变量i的值都会自加1。
只是当作为表达式时,赋值不一样:i++是先赋值在自加,++i是先自加在赋值
关系运算符:>(大于),<(小于),<=(小于等于),>=(大于等于),==(引用等于),!=(不等于)
位运算符:&(与),|(或),^(), ~(),<<(左移),>>(右移),>>>(右移补零)
例:
a =60,b=15
A = 0011 1100
B = 0000 1111
————————
&运算结果: 0000 1100,如果两个都为1就为1,否者为0;
|运算结果: 0011 1111,只自要其中一个为1就为1,两个为0才为0;
^运算结果: 0011 0011,向对应的两个相同就为0,不相同为1;
~A运算结果: 1100 0011,将1变为0,将0变为1;
A<<2运算结果: 1111 0000,将位数往左边移动两位
A>>2运算结果: 1111,往右移两位
A>>>2运算结果:0000 1111,往右移,空位用零补充
逻辑运算符:&&(与),||(或),!(非)
逻辑&&,||,称为短路与,或,是做逻辑比较操作
例:
int i = 4; int n = 5; System.out.println((i>3)&&(n>3)); //输出true。要所有条件成立,才为true,否者为false System.out.println((i>3)&&(n>8)); //输出false。因为n>8不成立 System.out.println((i>3)||(n>8)); //输出true。自要一个条件成立就为true System.out.println((i>8)&&(n>3)); //输出false。两个条件都不成立时为false System.out.println(!(i>5)); //输出true。!是反着来的 //解析 //i>5 = false //!(i>5) = true //也就是将false变为true,将true变为false
赋值运算符:
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C + = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A - = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C - A * = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A / = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A等价于C = C / A (%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A << = 左移位赋值运算符 C << = 2等价于C = C << 2 >> = 右移位赋值运算符 C >> = 2等价于C = C >> 2 &= 按位与赋值运算符 C&= 2等价于C = C&2 ^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2 | = 按位或赋值操作符 C | = 2等价于C = C | 2
条件运算符:(?:),也叫三目运算
例:[条件表达式?表达式1:表达式2]
int i = 10; int b; b = ((i==10)?30:20); //判断条件i==10是否成立,成立b=30 //否者b=20; System.out.println(b); //输出30下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 操作符 关联性 后缀 () [] . (点操作符) 左到右 一元 + + - !〜 从右到左 乘性 * /% 左到右 加性 + - 左到右 移位 >> >>> << 左到右 关系 >> = << = 左到右 相等 == != 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或 | 左到右 逻辑与 && 左到右 逻辑或 | | 左到右 条件 ?: 从右到左 赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左 逗号 , 左到右
