Java运算符

来源:互联网 发布:python多线程编程实例 编辑:程序博客网 时间:2024/05/22 10:53

运算符分类

编号 类型 1 算术运算符 (+,-,*,/,%,++,–) 2 关系运算符 (>,<,>=,<=,==,!=) 3 逻辑运算符 (!,&&,||) 4 位运算符 (>>,<<,>>>,&,|,^,~ ) 5 赋值运算符 (=,及 其 扩 展 赋 值 运 算 符 如 +=) 6 条件运算符( ?:) 7 其它运算符

算术运算符

符号 名称 优先级 类型 + 正号 从右到左 单目 - 负号 从右到左 单目 + 加 从左到右 双目 - 减 从左到右 双目 * 乘 从左到右 双目 / 除 从左到右 双目 % 取余 从左到右 双目 ++ 自增 从右到左 单目 - - 自减 从右到左 单目

问题1:

//当j=0时,j+=(++j)+(j++) 这条式子的值是多少?int j = 0;System.out.println(j+=(++j)+(j++));

运行结果是:2



我们将式子还原一下:

如果j=0

j+=(++j)+(j++)  原式子:    0+=(1)+(1)最终结果是:2

如果j=1

j+=(++j)+(j++)  原式子:    1+=(2)+(2)最终结果是:5

如果j=2

j+=(++j)+(j++)  原式子:    2+=(3)+(3)最终结果是:8

得出来的结论是:

++j :先运算后执行j++ :先执行后运算因为不管是(++j) 还是 (j++) 都会影响它本身。




问题2:

      如果定义一个byte类型的变量等于127,然后执行+1操作会是什么结果?

public class Demo{        public static void main(String args[]){                //循环了,跳出,原因是byte类型范围是-128-127                //当循环到127时,会向左位移1位变成-128                //所以会一直循环                for(byte i =0 ;i < 200;i++){                        System.out.println(i++);                }        }   }

1

得出来的结果是: 在-128 到 127 范围内无限循环。

原因是

byte a = 127;//加运算符是会自动转换的,所以不会出错System.out.println(a + 1);

2


Linux 命令:

>  在LINUX下是标准输出<  在linux下是标准输入

逻辑运算符

符号 名称 优先级 类型 < 小于 从左到右 双目 <= 小于等于 从左到右 双目 > 大于 从左到右 双目 >= 大于等于 从左到右 双目 == 等于 从左到右 双目 != 不等于 从左到右 双目 & 按位与 从左到右 双目 | 按位或 从左到右 双目 ^ 按位异或 从左到右 双目 && 短路与 从左到右 双目 || 短路或 从左到右 双目



  • 理论归理论,还要多练习,这里拿 && 跟 || 来测试
int i =0;if((2-1>0) || (1==++i)){    System.out.println(i);}

结果为0
因为||运算符中,前面有个为true时(2-1>0),后面的都不会执行


int i =0;if((2-1>10) && (1==++i)){    System.out.println(i);}System.out.println("第二行 i=" + i);

结果是不执行。
因为(2-1>10)不成了,所以下面的都不执行


位运算符

符号 名称 优先级 类型 << 左移位运算符 从左到右 双目 >> 带符号右位移运算符 从左到右 双目 >>> 无符号右移 从左到右 双目 < 小于 从左到右 双目 <= 小于或等于 从左到右 双目 > 大于 从左到右 双目 >= 大于或等于 从左到右 双目

赋值运算符

符号 名称 优先级 类型 = 赋值运算符 从右到左 双目 += 混合赋值运算符 -= *= /= %= &= |= ^= <<= >>= >>>=

条件运算符

符号 名称 优先级 类型 ?: 条件运算符 从右到左 三目

其他运算符

符号 名称 优先级 类型 . 点 从左到右 双目 ( ) 圆括号 从左到右 [ ] 方括号 从左到右 instanceof 确定某对象是否属于指定的类 从左到右 双目
1 0
原创粉丝点击