1数学运算符
基本的数学运算符:+,-,*,/,%(余),++(自加),--(自减)
1.1同类型参与运算可能需要自动类型转换
例:
byte by = 127;
byte by1 = 127;
System.out.println(by+by1); //输出254,byte的最大值是127,当运算后的值超过边界时,就会自动转换类型
byte by2 = (by+by1); //如:这句就会报错,强制转换后就不会得到向要的结果
1.2不同类型运算会自动转换类型
例:
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,小数点后面的直接去掉,不会四舍五入
1.4byte和char,shor运算
注意的是:这三类数据进行运算时,都会先转换成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型啊,输出8
1.5java字面量
java字面量的运算被javac优化。java中有个规则:字面量运算编译时要做优化
例:
int i = 7+4;
//7和4就是字面量
//7+4编译时会自动加为11,之后才赋值给i
1.6余数
int n = 5;
System.out.println(n%7); //商=0,余=5
//输出5
*注意的是:
1,0对其它数的余数都是0;
2,n%3是周期函数,函数值[0,3)。
3,负数的余数是负数
1.6自增自减
例:
// 后++
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是先自加在赋值
2关系运算符
关系运算符:>(大于),<(小于),<=(小于等于),>=(大于等于),==(引用等于),!=(不等于)
3位运算
位运算符:&(与),|(或),^(), ~(),<<(左移),>>(右移),>>>(右移补零)
例:
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,往右移,空位用零补充
4逻辑运算
逻辑运算符:&&(与),||(或),!(非)
逻辑&&,||,称为短路与,或,是做逻辑比较操作
例:
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
5赋值运算
赋值运算符:
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | 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 |
6条件运算
条件运算符:(?:),也叫三目运算
例:[条件表达式?表达式1:表达式2]
int i = 10;
int b;
b = ((i==10)?30:20);
//判断条件i==10是否成立,成立b=30
//否者b=20;
System.out.println(b); //输出30
7运算符的优先级
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | + + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |