六、运算符
算术运算符 | |
---|---|
一元运算符 | ++,-- |
二元运算符 | +,-,*,/,% |
赋值运算符 | = |
扩展运算符 | +=,-=,*=,/= |
关系运算符 | >,<,>=,<=,==,!=,instanceof |
逻辑运算符 | &&,||,!,^ |
位运算符 | &,|,^,~,>>,<<,>>> |
条件运算符 | ?: |
字符串连接符 | + |
1、算数运算符
1、一元运算符
算数运算符中++,--属于一元运算符, 该类运算符只需要一个操作数。
-
1、无论是++还是--,每次运算量为1。
-
2、运算符在前面++a;先运算,再赋值。
-
3、运算符在后面a++;先赋值,再运算。
public class TestArithmeticOneOperator {
public static void main(String[] args) {
int a = 2;
System.out.println("a="+a); //a=2
int b = a++; //先给b赋值,a再加1
System.out.println("a="+a); //a=3
System.out.println("b="+b); //b=2
int c =++a; //a先加1,再给c赋值
System.out.println("a="+a); //a=4
System.out.println("c="+c); //c=4
int d =--a; //a先减1,再给d赋值
System.out.println("a="+a); //a=3
System.out.println("d="+d); //d=3
}
}
结果
a=2
a=3
b=2
a=4
c=4
a=3
d=3
2、二元运算符
算数运算符中+,-,*,/,%属于二元运算符, 二元运算符指的是需要两个操作数才能完成运算的运算符,其中%是取模运算符,就是我们常说的求余数操作。
二元运算符的运算规则
整数运算:
1、如果两个操作数有一个为long,则结果也为long.
2、没有long时,结果为int。即使操作数全为short,byte,结果也为int。
浮点运算:
1、如果两个操作数有一个为double,则结果为double。
2、只有两个操作数都是float,则结果为float。
取模运算:
1、其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:10%3=1,-11%3=-2;11%-3=2
public class TestArithmeticTwoOperator {
/**
* @param args
*/
public static void main(String[] args) {
byte a = 'a'; //a为97
System.out.println("a="+a); //a为97
short b = 2;
System.out.println("b="+b); //b=2
//byte c = a+b; //报错Type mismatch: cannot convert from int to byte,可见a+b是int类型,而不是short类型
int c = a+b; //97+2=99
System.out.println("c=a+b="+c); //c=97+2=99
long d = 3L;
System.out.println("d="+d); //d=3
//int e = a+d; //报错Type mismatch: cannot convert from long to int,可见a+d是long类型
long e = a+d; //97+3=100
System.out.println("e=a+d="+e); //e=97+3=100
int f = 2*++b; //
System.out.println("f=2*++b="+f); //f=2*(++b)=2*3=6,b先运算为3,在*2赋值给f,此时b=3
System.out.println("b="+b); //b=3
long g = 2*--d;
System.out.println("g=2*--d="+g); //g=2*(--d)=2*2=4,d先运算为2,在*2赋值给g,此时d=2
System.out.println("d="+d); //d=2
long h = 2*d--;
System.out.println("h=2*d--="+h); //h=2*2=4,d先*2赋值给h,再运算--为1,此时d=d--=1
System.out.println("d="+d); //d=1
System.out.println("-11%3="+-11%3); //-11%3=-3......-2
System.out.println("-11%-3="+-11%-3); //-11%-3=3......-2
System.out.println("11%-3="+11%-3); //11%-3=-3......2
}
}
结果
a=97
b=2
c=a+b=99
d=3
e=a+d=100
f=2*++b=6
b=3
g=2*--d=4
d=2
h=2*d--=4
d=1
-11%3=-2
-11%-3=-2
11%-3=2
2、赋值运算符
int a = 3;int b = a;相当于把3赋值给a,把a的值赋给b;
3、扩展运算符
扩展运算符 | ||
---|---|---|
运算符 | 用法举例 | 等效的表达式 |
+= | a+=b | a=a+b |
-= | a-=b | a=a-b |
*= | a*=b | a=a*b |
/= | a/=b | a=a/b |
%= | a%=b | a=a%b |
public class TestExtendedOperator {
public static void main(String[] args) {
int a = 1;
int b = 2;
a+=b; //a=a+b=1+2=3
System.out.println("a="+a);
a-=b; //a=a-b=3-2=1
System.out.println("a="+a);
a*=b; //a=a*b=1*2=2
System.out.println("a="+a);
a/=b; //a=a/b=2/2=1
System.out.println("a="+a);
a%=b; //a=a%b=1%2=0......1
System.out.println("a="+a);
a*=b+1; //a=a*(b+1)=1*(2+1)=3
System.out.println("a="+a);
a*=++b; //a=a*(++b)=3*3=9,b=3
System.out.println("a="+a);
System.out.println("b="+b);
a*=b--;
System.out.println("a="+a); //a=a*b=9*3=27,b=b--=2
System.out.println("b="+b); //b=b--=2
a*=b++; //a=a*b=27*2=54,b=b++=3
System.out.println("a="+a);
System.out.println("b="+b); //b=b++=3
}
}
a=3
a=1
a=2
a=1
a=1
a=3
a=9
b=3
a=27
b=2
a=54
b=3
4、关系运算符
关系运算符用来比较运算,且运算的结果是布尔值:true/false
| 运算符 | 含义 | 示例 | | ------ | ------------ | ---- | | == | 等于 | a==b | | != | 不等于 | a!=b | | > | 大于 | a>b | | < | 小于 | a<b | | >= | 大于或者等于 | a>=b | | <= | 小于或者等于 | a<=b |
注意事项:
1、=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
2、==、!=是所有(基本和引用)数据类型都有可以使用。
3、>、>=、<、<=仅针对数值类型(byte、short、int、long、float、double。以及char)。
public class TestRelationalOperator {
public static void main(String[] args) {
char a = 'a';
short b = 97;
int c = 98;
float d = 97.1f;
if(b==a){
System.out.println("b==a");
}
if(c>=a){
System.out.println("c>=a");
}
if(a<=d){
System.out.println("a<=d");
}
}
}
结果
b==a
c>=a
a<=d
5、逻辑运算符
逻辑运算的操作数和运算结果都是 boolean值。
逻辑运算符 |
---|
运算符 | 说明 |
---|
逻辑与 | &(与) | 两个操作数位true,结果才是true,否则是false |
---|---|---|
逻辑或 | |(或) | 两个操作数有一个true,结果就是true |
短路与 | &&(与) | 只要有一个为false,则直接返回false |
短路或 | ||(或) | 只要有一个为true,则直接返回true |
逻辑非 | !(非) | 取反:!false为true,!true为false |
逻辑异或 | ^(异或) | 相同为false,不同为true |
public class TestLogicalOperator {
public static void main(String[] args) {
boolean a1 = true;
boolean a2 = false;
int b1 = 2;
int b2 = 2;
System.out.println("a1&a2="+(a1&a2)); //false,a2为false,所以为fasle
System.out.println("a1|a2="+(a1|a2)); //true,a1为true,所以为true
System.out.println("a1&&a2="+(a1&&a2)); //false,a2为false,所以为fasle
System.out.println("a1||a2="+(a1||a2)); //true,a1为true,所以为true
System.out.println("!a1="+(!a1)); //false,a1为true,所以!a1为false
System.out.println("a1^a2="+(a1^a2)); //true,不一样,为true
System.out.println("a2^a2="+(a2^a2)); //false,一样,为fasle
System.out.println("a1&b1++==3="+(a1&++b1==3)); //true,a1为true,并且++b1此时为3,3==3位true,所以为true
System.out.println("b1="+b1); //b1=3
System.out.println("a2&&b2++==3="+(a2&&++b2==3));//false,a2为fasle,此时结果为fasle,后面的不在判断,所以b2还是2
System.out.println("b2="+b2); //b2=2
}
}
结果
a1&a2=false
a1|a2=true
a1&&a2=false
a1||a2=true
!a1=false
a1^a2=true
a2^a2=false
a1&b1++==3=true
b1=3
a2&&b2++==3=false
b2=2
6、位运算符
位运算指的是进行二进制位的运算
public class TestBitwiseOperators {
/**
* @param args
*/
public static void main(String[] args) {
int a = 3; //(前面28个0)0011=3
int b = 4; //(前面28个0)0100=4
int c = 0b11111111111111111111111111111011;
System.out.println("~a="+~a); //(前面28个1)1100=-4,涉及符号位
System.out.println("~b="+~b); //(前面28个1)1011=-5,涉及符号位
System.out.println("c="+c); //-5,涉及符号位
System.out.println("a&b="+(a&b)); //(前面28个0)0000=0
System.out.println("a|b="+(a|b)); //(前面28个0)0111=7
System.out.println("a^b="+(a^b)); //(前面28个0)0111=7
System.out.println("a>>1="+(a>>1)); //(前面28个0)0011>>1=(前面28个0)0001=1
System.out.println("b<<2="+(b<<2)); //(前面28个0)0100<<2=(前面27个0)0000=16
}
}
结果
~a=-4
~b=-5
c=-5
a&b=0
a|b=7
a^b=7
a>>1=1
b<<2=16
7、条件运算符
语法格式:x?y:z
其中x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则,整个运算的结果为表达式z的值。
public class TestConditionalOperation {
/**
* @param args
*/
public static void main(String[] args) {
int a = 0;
int a2 = 2;
String string1 = a>0?"大于0":a==0?"等于0":"小于0";
String string2 = a2%2==0?"偶数":"奇数";
System.out.println(string1); //等于0
System.out.println(string2); //偶数
}
}
等于0
偶数
8、字符串连接符
"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
public class TestStringConnector {
/**
* @param args
*/
public static void main(String[] args) {
String a = "3";
int b = 4;
int c = 5;
System.out.print("a+b+c=");
System.out.println(a+b+c); //a+b+c="3"+4+5="34"+5="345"
System.out.print("b+c+a=");
System.out.print(b+c+a); //b+c+a=4+5+"3"=9+"3"="93"
}
}
a+b+c=345
b+c+a=93
标签:System,运算符,a2,println,true,out
From: https://www.cnblogs.com/yunsheng22/p/18346418