运算符(详解与代码)

 

作为一门计算机语言,肯定要涉及数学运算,运算离不开运算符,Java也提供了一套丰富的运算符来操作变量。

算术运算符 一元运算符 +,-,*,/,%
二元运算符 ++,--
赋值运算符 =
扩展运算符 +=,-=,*=,/=
关系运算符 >,<,>=,<=,==,!=,instanceof
逻辑运算符 &&,||,!,^
位运算符 &,|,^,~,>>,<<,>>>
条件运算符 ?:
字符串连接符 +

目录

 

1、算数运算符

1、一元运算符

2、二元运算符

2、赋值运算符

3、扩展运算符

4、关系运算符

5、逻辑运算符

6、位运算符

7、条件运算符

8、字符串连接符

 


1、算数运算符

1、一元运算符

       算数运算符中++,--属于一元运算符, 该类运算符只需要一个操作数。

1、无论是++还是--,每次运算量为1。

2、运算符在前面++a;先运算,再赋值。

3、运算符在后面a++;先赋值,再运算。

public class TestArithmeticOneOperator {

	/**
	 * @param args
	 */
	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 {

	/**
	 * @param args
	 */
	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
>= 大于或者等于 a>=b
<= 小于或者等于 a<=b

 

注意事项:

1、=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。

2、==、!=是所有(基本和引用)数据类型都有可以使用。

3、>、>=、<、<=仅针对数值类型(byte、short、int、long、float、double。以及char)。

public class TestRelationalOperator {
	
	/**
	 * @param args
	 */
	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 {

	/**
	 * @param args
	 */
	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、位运算符

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

位运算符
位运算符 说明 举例 结果 解释
~ 取反 ~4 -5 (前面28个0)0100取反为(前面28个1)1011=-5,涉及符号位
& 按位与 3&4 0 (前面28个0)0011&(前面28个0)0100=(前面28个0)0000=0
| 按位或 3|4 7 (前面28个0)0011|(前面28个0)0100=(前面28个0)0111=0
^ 按位异或 3^4 7 (前面28个0)0011^(前面28个0)0100=(前面28个0)0111=0
<< 左移运算符,左移一位相当于乘2 3>>1 1 (前面28个0)0011>>1=(前面28个0)0001=1
>> 右移运算符,右移一位相当于除2取商 4<<2 16 (前面28个0)0100<<2=(前面27个0)0000=16
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

 

你可能感兴趣的:(java基础)