运算符

六、运算符

算术运算符
一元运算符 ++,--
二元运算符 +,-,*,/,%
赋值运算符 =
扩展运算符 +=,-=,*=,/=
关系运算符 >,<,>=,<=,==,!=,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、>、>=、<、<=仅针对数值类型(byteshortintlongfloatdouble。以及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、位运算符

位运算指的是进行二进制位的运算

image-20240728220225356-1722566703220-25

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

posted @   北方的尘中客  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示