运算符
对常量和变量进行操作的符号称为运算符
表达式
用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
定义两个int类型的变量a,b,做加法(a + b)
常用运算符
算术运算符
数字参与运算
int a = 10;
int b = 20;
int c = a + b;
System.out.println(c); //输出30
字符参与加法操作
char c = 'a';
char d = 'b';
System.out.println(c + 10); //107
System.out.println(c + d); //195
/**
* 字符参与加法操作。拿字符在计算机中底层存储对应的数据值(既字符所对应的ASCII码值)参与运算
* '0' 48
* 'a' 97
* 'A' 65
*/
字符串参与加法运算
String a = "abc";
String b = "10";
int c = 10;
int d = 20;
System.out.println(a + b); //abc10
System.out.println(a + b + c); //abc1010
System.out.println(a + b + c +d); //abc101020
System.out.println(c + a + b + c); //10abc1010
System.out.println(c + d + a + b + c);//30abc1010
减法运算符
int a = 20;
int b = 10;
int c = a - b;
System.out.println(c); //输出10
字符参与减法运算和字符参与加法一样,先转换为相对应的ASCII码值再进行运算。字符串不能直接进行减法运算,否则编译器会报错。
乘法运算符
int a = 2;
int b = 10;
int c = a * b;
System.out.println(c); //输出20
字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。
除法运算符
int a = 10;
int b = 2;
int c = 2.0;
int d = a/b;
int e = a/c;
System.out.println(d); //输出5
System.out.println(e); //输出5.0,如果要输出有小数点的则要除数或者被除数小数点后面要有0,如果两个都是整数,那么结果是整数。
字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。
取余运算符
int a = 5;
int b = 2;
int c = 3;
int d = a % b;
int e = a % c;
System.out.println("a % b =" + d); //输出1
System.out.println("a % e =" + e); //输出2
字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。
总结(各种运算符算能运算的对象)
加法:数字、字符、字符串
减法:数字、字符
除法:数字、字符
取余:数字、字符
自增自减运算符
int a = 1;
int b = 1;
a++;
++b;
System.out.println(a); //2
System.out.println(b); //2
int c = a++;
int d = ++b;
System.out.println(c); //2
System.out.println(d); //3
System.out.println(a); //3
解释: 在定义完a,b之后其值都为1,a的自增运算符在后面,b的自增运算符在前面,由于此两个数没有进行任何运算,所以输出值都为2。再看c与d,c的值是在a自增之前的值,也就是说先将值赋予c之后再自增。而b则是先自增再赋值给d。
int b = 0;
int c = 0;
int d = 1;
int e = 1;
for (int i = 1; i <= 4; i++) {
b += i;
//等价于 b = b + i;
c -= i;
//等价于 c = c - i;
d *= i;
//等价于 d = d * i;
e %= i;
//等价于 e = e % i;
}
System.out.println(b); //10
System.out.println(c); //-10
System.out.println(d); //24
System.out.println(e); //0
注释:这些扩展运算符可以简化代码的书写
关系运算符
int a = 10;
int b = 20;
int c = 10;
System.out.println(a == b); //false
System.out.println(a == c); //true
System.out.println("-----------------");
System.out.println(a != b); //true
System.out.println(a != c); //false
System.out.println("-----------------");
System.out.println(a > b); //false
System.out.println(a > c); //false
System.out.println("-----------------");
System.out.println(a >= b); //false
System.out.println(a >= c); //true
System.out.println("-----------------");
注释:这些关系运算符之间的关系只有true和false。
逻辑运算符
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) & (a > c));// false & false
System.out.println((a < b) & (a > c)); // true & false
System.out.println((a > b) & (a < c)); // false & true
System.out.println((a < b) & (a < c)); // true & true
System.out.println("---------------");
System.out.println((a > b) | (a > c));// false | false
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a > b) | (a < c)); // false | true
System.out.println((a < b) | (a < c)); // true | true
System.out.println("---------------");
System.out.println((a > b) ^ (a > c));// false ^ false
System.out.println((a < b) ^ (a > c)); // true ^ false
System.out.println((a > b) ^ (a < c)); // false ^ true
System.out.println((a < b) ^ (a < c)); // true ^ true
System.out.println("---------------");
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
三元运算符
格式
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
int a = 10;
int b = 20;
int c = (a > b) ? a : b;
System.out.println("c:" + c); //10
java中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
public static void main(String[] args) {
int number = 10;
//原始数二进制
printInfo(number); //1010
number = number << 1;
//左移一位
printInfo(number); //10100
number = number >> 1;
//右移一位
printInfo(number); //1010
}
/**
* 输出一个int的二进制数
*/
private static void printInfo(int num){
System.out.println(Integer.toBinaryString(num));
}
将结果对齐
43210 位数 -------- 1010 十进制:10 原始数 number 10100 十进制:20 左移一位 number = number << 1; 1010 十进制:10 右移一位 number = number >> 1;对于:>>>
无符号右移,忽略符号位,空位都以0补齐
value >>> num -- num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位