javaEE学习记录Day03

Day03

一、运算符

1.算数运算符

+、-、*、/、%、++、–

经典面试题一:(部分代码)

int a = 8;

int b = (a++)+(++a)+(a*10);

System.out.println(b);

输出结果为118

经典面试题二:(部分代码)

int i = 0 ;  

i = ++i; 

System.out.println(i);

输出结果为1

底层实现:i = (int)(i+1); i=i;

int i = 0;  

i = i++; 

System.out.println(i); 

输出结果为0

底层实现:int temp = i; i = (int)(i+1); i = temp;

2.赋值运算符

=、+=、-=、*=、/=、%=

经典面试题一:(部分代码)

int a,b; 

a = b = 100;

System.out.println(a); 

System.out.println(b);

输出结果为100

​ 100

经典面试题二:(部分代码)

short s=1; 
s = s+1; 
System.out.println(s);

结果: 会报错误: 不兼容的类型: 从int转换到short可能会有损失

在此情况中,做赋值运算前会先将s+1默认为int类型,从而导致编译出错,可以用强制转换来避免,但是要注意待转换的值的大小是否在目标所属数据类型的取值范围中,若不在,则可能会产生与期望所不符合的结果。

short s=1; 
s += 1;
System.out.println(s);

结果:2

+=是java的赋值运算符,有特殊处理。

3.关系运算符

==、!=、>、 <、 >=、 <=

关系运算符的结果都是boolean类型,只有true或者false这两种结果。

经典面试题一:(部分代码)

int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);

输出结果为true

经典面试题二:(部分代码)

boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2);
System.out.println(b3);
boolean b4 = (b1 = b2);
System.out.println(b4);

输出结果为false false

4.逻辑运算符

&(与)、&&(短路与)、|(或) 、||(短路或)、!(非)、^(异或)

规则:

& 和 && 规则:两个有一侧为false,结果为false

| 和 || 规则 :两侧有一侧为true,结果为true

^ 规则:两侧相同为false,不同为true

!规则:置反,false变成true , true变成false

注意:

逻辑运算符运行结果都是boolean类型,&、&&、|、||、^ 两侧都应该是boolean类型数据。

5.三目运算符/三元运算符

操作符: ? :

语义:布尔表达式?结果1:结果2

当表达式结果为真,获得结果1,若结果为假,则获得结果2

例题1(部分代码)

int a=5;
System.out.println("a="+((a<5)?10.9:9));

结果:9

例题2(部分代码)

char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?100:x);

结果:120 x

第一个结果中,i是int类型,在运算false?i:x时,会将字符类型x转换为int类型。第二个结果中,没有存在这种情况。

6.字符拼接符与位运算符

字符拼接符:+(当此符号两侧中有任意一方为字符串时,是字符拼接符,否则是算术运算符)

位运算符: & 、 |、 ^ 、 <<、 >>、 >>>

&、|、^:前后两者都是boolean值,此符号为逻辑运算符
&、|、^:前后两者都是数值,此符号为位运算符

对位运算符的一些简单理解:(部分代码)

		byte a = 23;//0001,0111
		byte b = 14;//0000,1110
				   
		//同位比较,两者都为1,结果为1(对应的二进制位置上的数值,纵向对比)
		//0000,0000,0000,0000,0000,0000,0001,0111 -- int类型的23(比较时会上升到int类型进行比较也就是32位)
		//0000,0000,0000,0000,0000,0000,0000,1110 -- int类型的14
		//0000,0000,0000,0000,0000,0000,0000,0110 -- int类型的6
		//0000,0110 --  byte类型的6   (a & b)的结果
		byte result = (byte)(a & b);
		System.out.println(result);//6 - 0000,0110
		
		//同位比较,两者任意一方有1,结果为1
		System.out.println(a | b);//31 - 0001,1111
		
		//同位比较,不同有1,相同为0
		System.out.println(a ^ b);//25 - 0001,1001
		
		
		
		//<<左移:整体向左移动n位,就用n个0补位
			byte b = 8;//0000,1000
					   //0010,0000(b<<2运算后的二进制结果)
			System.out.println(b << 2);//32
			
		//>>右移:整体向右移动n位,就用n个最高位补位
			byte b1 = 8;//0000,1000
						//0000,0010
			System.out.println(b1 >> 2);//2
			
			byte b2 = -8;//1111,1000
						 //1111,1110
			System.out.println(b2 >> 2);//-2
			
		//>>>无符号位右移:整体向右移动n位,就用n个0补位
			byte b1 = 8;//0000,1000
						//0000,0010
			System.out.println(b1 >>> 2);//2
			
			byte b2 = -8;//1111,1000
			//001111,1111,1111,1111,1111,1111,1111,10
			System.out.println(b2 >>> 2);//会输出1073741822(比较特殊的例子)

7.表达式与运算符的优先级别

5+6:算数表达式

5>6:关系表达式

5|6:位运算表达式

运算符的优先级别如图:(不必硬记,灵活运用小括号即可)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值