牛骨文教育服务平台(让学习变的简单)

这一节我们来学习java语言中的运算符。

Java语言支持如下运算符:

算术运算符:+,-,,/,%,++,--
关系运算符:>,<,>=,<=,==,!=
逻辑运算符:!,&,|,^,&&,||
位运算符:&,|,^,~,>>,<<,>>>
赋值运算符:=
扩展赋值运算符:+=,-=,
=,/=
字符串连接运算符:+

我们直接看例子吧:

先看一下算术运算符。

class OperateDemo 
{
	public static void main(String[] args) 
	{
		//算术运算符  + - * / %(取余,模运算) +(连接符)
		// ++ (自增:就是在原有基础上加一,再赋给原有数据)  --
		int x = 6370;
		x = x / 1000 * 1000;//结果是6000,也就是说java是强制运算语言
		System.out.println(x);

		//取模运算主要用于开关算法的定义

		System.out.println(3 + 2);//加法
		System.out.println("3" + 2);//String连接符
		System.out.println("5 + 5 =" + 5 + 5);//5 + 5 =55
		System.out.println("5 + 5 =" + (5 + 5));//5 + 5 =10

		int a = 4,b = 5;
		System.out.println("a:" + a + ",b:" + b);//a:4,b:5

		int a1 = 3,b1;
		//a1 ++;//相当于a1=a1+1;
		//b1 = a1++;//a1=4,b1=3   这个过程是先把a的值留存在一个临时空间内,然后在原空间进行++运算并将结果存进去,然后把临时空间的值赋给b
		b1 = ++a1;//a1=4,b1=4  这个过程中先进行++运算,并把结果赋给a,再把a的值赋给b
		System.out.println("a1="+a1+",b1="+b1);//a1=4,b1=4

		int i = 3;//更加清晰的反映了这个过程
		i = i++;
		System.out.println("i="+i);//i=3
		int j = 3;
		j = ++j;
		System.out.println("j="+j);//j=4

	}
}

结果:

再看符值运算符

class OperateDemo2 
{
	public static void main(String[] args) 
	{
		//赋值运算符   =  +=  -=  *=  /=  %=
		int a,b,c;
		a = b = c = 4;

		int a1 = 4;
		a1 += 2;//a1 = a1 + 2;

		short s = 3;//赋值,s是两个字节,3是四个字节,自行检测
		//s += 4;//这个在底层做了自动转换
		//s = s + 4;//这个报错,缺失精度,不能自动转换,把int类型存入short中
		s = (short)(s + 4);//等价于s += 4;
		System.out.println("s="+s);
	}
}

结果:

比较运算符

class OperateDemo3 
{
	public static void main(String[] args) 
	{
		//比较运算符  > < == >= <= != instanceof(是不是实例)
		//比较运算符,运算要么为真,要么为假,true or false
		System.out.println(3>2);//true

		/*逻辑去处符  &(与)  |(或)  ^(异或) !(非) &&(双与)  ||(双或)
		x > 2 && x < 5 等价于  2<x<5
		逻辑运算符是用于连接两个boolean类型的表达式
		&:符号的去处特点:
		true & true = true;
		true & false = false;
		false & false = false;
		false & true = false;
		&:运算规律:
		运算的两边只要有一个是false,结果一定为false;只有两边同为true,结果才为true
		
		|:运算特点:
		true | true = true;
		true | false = true;
		false | false = false;
		false | true = true;
		|:运算规律:
		去处两过只要有一个是true,结果为true;只有两边都为false,结果才为false
		
		^:异或:和或有点不一样.
		^:运算特点:
		true | true = false;
		true | false = true;
		false | false = false;
		false | true = true;
		^:运算规律:
		两边的结果相同,结果为false;两边的结果不同,结果为true.

		!:运算特点:!true = false; !false = true; 

		
		&&和||可以短路运算
		&&:当左边为false时,右边不再参与运算
		||:当左边为true时,右边不再参与运算

		*/
		int x = 3;
		System.out.println(x>2&x<5);
		System.out.println(x<2|x>5);

	}
}

结果:

位运算符

class OperateDemo4 
{
	public static void main(String[] args) 
	{
		/*
		位运算符:二进制
		&(与)  |(或)  ^(异或)  ~(去反) <<(左移)  >>(右移)  >>>(无符号右移)  
		6 & 3 = 2
		 0000-0000 0000-0000 0000-0000 0000-0110  6
		&0000-0000 0000-0000 0000-0000 0000-0011  3
		-----------------------------------------
		 0000-0000 0000-0000 0000-0000 0000-0010  2

		6 | 3 = 7
		 0000-0000 0000-0000 0000-0000 0000-0110  6
		|0000-0000 0000-0000 0000-0000 0000-0011  3
		-----------------------------------------
		 0000-0000 0000-0000 0000-0000 0000-0111  7

		6 ^ 3 = 5
		 0000-0000 0000-0000 0000-0000 0000-0110  6
		^0000-0000 0000-0000 0000-0000 0000-0011  3
		-----------------------------------------
		 0000-0000 0000-0000 0000-0000 0000-0101  5
		 6 ^ 3 ^ 3 = 6:一个数异或同一个数两次,结果还是这个数.

		3 << 2 = 12  3 << 3 = 24   //向左移几位,左边的几位就被舍取,右边加几个0
		0000000000000000000000000000011  3  
		0000000000000000000000000001100  12
		@左移几位,其实就是该数乘以2的几次方,可以完成2的次幂运算

		6 >> 1 = 
		对于高位出现的高位,原来最高位为0,就用0补位,原来最高位为1,就用1补位
		右移几位其实就是该数据除以2的几次方

		>>>:无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补.

		*/
		
		System.out.println(6 & 3);//6在计算中:0000-0000 0000-0000 0000-0000 0000-0110
		System.out.println(6 | 3);
		System.out.println(6 ^ 3);
		System.out.println(~6);//-7

		System.out.println(3 << 2);//左移两位,相当于乘以2的2次方
	}
}

结果:

三元运算符

class OperateDemo5 
{
	public static void main(String[] args) 
	{
		/*
		三元运算符:
		格式:(条件表达式)?表达式1:表达式2
		如果条件为true,运算表达式1
		如果条件为false,去处表达式2
		*/
		int x = 3,y;
		y = (x > 1) ? 100 : 200;
		System.out.println("y="+y);

		//三元运算符的一个小应用
		//获取两个整数中的较大的整数
		int x1 = 3;
		int y1 = 4;
		int max = (x1>y1)?x1:y1;
		System.out.println(max);

		//获取三个整数中的最大的整数
		int o,p,q;
		o = 5;
		p = 6;
		q = 4;
		int temp = (o>p)?o:p;
		int max1 = (temp>q)?temp:q;
	}
}

结果:

最后看一个简单的测试就过吧

class OperateTest 
{
	public static void main(String[] args) 
	{
		//最有效率的方式算出2乘以8等于几?
		System.out.println(2 << 3);
		System.out.println(8 << 1);
		//对两个整数变量直接互换(不需要第三方变量)
		int a = 3,b = 5;
		
		/*  
		阅读性好,开发时用
		int c;
		c = a;
		a = b;
		b = c;
		*/

		/*
		这种方式一般不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化.
		a = a + b;
		b = a - b;
		a = a - b;
		*/

		/*
		面试时用,可读性差
		a = a ^ b;//a = 3 ^ 5;
		b = a ^ b;//(3 ^ 5) ^ 5;
		a = a ^ b;//(3 ^ 5) ^ 3;
		*/
		System.out.println("a="+a+",b="+b);

	}
}

结果:

这一节就到这里吧,下节再说。