学Java的第十天--运算符(一)

🍔🍔🍔虽然有一点点基础还是系统学习一下吧,1100h加油冲冲冲!
🥨🥨运算符种类:
在这里插入图片描述
🍪算术运算符:
在这里插入图片描述
这里加减就不举例验证了,验证一下除法和自增自减:
除法:问题:如果定义两个int 型数12和5,12/5怎么才能得2.4

class AriTest{
	public static void main(String[] args){
        	int num1 = 12;
        	int num2 = 5;
        	int result1 = num1 /num2;
        	System.out.println(result1);//2

		double result2 = num1 / num2;
		System.out.println(result2);//2.0
        }

}

结果:可见把运算结果用double型接收还是2.0,并不行。
在这里插入图片描述
1.以加0.0的方式将加数变成double型,int型和double型运算结果会转为double型。
2.将其中一个操作数进行强制类型转换为double再做除法。

class AirTest{
	public static void main(String[] args){
		int num1 = 12;
		int num2 = 5;
		
		double result3 = num1 / (num2 + 0.0);
		System.out.println(result3);
		double result4 =(double) num1 / num2 ;
 	        System.out.println(result4);

	}
}

结果为2.4
在这里插入图片描述
自增运算

class ZiZeng{
 public static void main(String[] args){
  int a1 = 10;
  int b1 = ++a1;
  System.out.println("a1 = " + a1 + ",b1 = " + b1);
  
  int a2 = 10;
  int b2 = a2++;
          System.out.println("a2 = " + a2 + ",b2 = " + b2);
 }
}

结果:
**在这里插**入图片描述
解释一下,第一个是a1先自增1变成11,然后将自增以后的数值11赋给b1;
第二个是a2先赋值给b2为10,然后再自增1变成11.
自增自减并不会改变其本身数据类型。(运算后溢出的话截断)

🍪赋值运算符(和==区分)
在这里插入图片描述
测试一下 “=”的支持连续赋值;

class FuZhi{
 public static void main(String[] args){
  int i1 = 10;
  int j1 =10;
  int i2,j2;
  i2 = j2 = 10;//连续赋值1
  int i3 = 10,j3 = 20;//连续赋值2
          System.out.println("i1= " +i1 + ",j1 = " + j1 );
  System.out.println("i2= " +i2 + ",j2 = " + j2 );
  System.out.println("i3= " +i3 + ",j3 = " + j3 );
 }
}

结果
在这里插入图片描述
测试扩展赋值运算符

class FuZhi{
 public static void main(String[] args){
  int num1 = 10;
  num1 +=2;//num1 = num1 + 2
  System.out.println("num1= " +num1 );
  int num2  = 12;
  num2 %= 5;//num2 = num2 % 5
  System.out.println("num2= " +num2 );  
 }
}

结果
在这里插入图片描述
这里测试了+=、%=;其他扩展赋值运算符操作其实是一样的。
你以为这个只是让程序员少写一点代码吗?并不完全!其实num +=2和num=num + 2还是有区别的,下面测试一下
代码如下:我们知道如果定义short s1 =10; s1 = s1 + 2;这段代码是肯定编译不过的,因为2是int型,大转小在不强制的情况下是会出错的。但是下面这样写不会

class FuZhi{
 public static void main(String[] args){
  short s1 = 10;
  s1 +=2;
  System.out.println("s1= " +s1 );
   
 }
}

结果
在这里插入图片描述
这就说明+=并不会改变变量本身的数据类型(其他扩展赋值运算符同理哦)
所以问题来了:在开发中。如果希望变量实现+2操作,有几种方法呢?(前提:int num = 10)
可以num= num +2;
也可以 num +=2;
不可以num++++哦!!!(虽然我也想过。哈哈)
放一个很绕的练习(曾经学C++的时候懵掉,现在才明白)

class FuZhi{
 public static void main(String[] args){
  int n = 10;
  n +=(n++) + (++n);// n = n + (n++) +(++n); 
  System.out.println("n= " +n );
   
 }
}

先分析一下n +=(n++) + (++n);先拆开“+=”为
n + (n++) +(++n);
10+(n++)这里是“后++”所以为10+10,但此时n已经变为11;
接着是(++n)这里是“前++”,所以(++n)要先加1,又因为n经前一步自增变为11,所以这里是12;所以结果是
10+10+12 = 32【要像计算机一样“走一步看一步”】
想起一个很重要 的事,自增用了好几次和别的运算后结果还可能和编辑器有关,比如c语言中VC++和gcc中不一样因为它们编译依据的规则不一样。
看看结果
在这里插入图片描述

🍪比较运算符
在这里插入图片描述

🍪逻辑运算符(只适用于boolean)
在这里插入图片描述
这里只测试& 与&& ;|和||的区别

class FuZhi{
 public static void main(String[] args){
  
  boolean b1 = false;
  int num1 = 10;
  if(b1 &(num1++ >0)){
   System.out.println("我现在在北京" );
  }else{
   System.out.println("我现在在南京" );
  }
  System.out.println("num1= " +num1 );   
  boolean b2 = false;
  int num2 = 10;
  if(b2 && (num2++ >0)){
   System.out.println("我现在在北京 " );
  }else{
   System.out.println("我现在在南京" );
  }
  System.out.println("num2= " +num2 );   
 }
}

结果:num2没有自增。
在这里插入图片描述
为什么呢?这里就要说一下短路与和与的区别了:
其中if判断这里b1 &(num1++ >0,“&”的左右两边都要为真才整体为真,这里“&”会看左边和右边是不是真;但是短路与“&&”会依次判断,如果第一个项就为假,式子整体肯定为假,后面就不看了,所以num2没有自增。
所以& 和&&区分:(|与||同理,结果与&和&&结论相同点2和不同点相反)
相同点:1.运算结果相同
2.当符号左边是true时,两者都会执行符号右边运算
不同点:当符号左边是false时,&继续执行符号右边运算,而&&不执行符号右边运算

例1在这里插入图片描述
结果在这里插入图片描述
例二(注意y=true那里是赋值哦)
在这里插入图片描述
🍪位运算符(操作的是数值)
在这里插入图片描述
面试题:以最高效的方式计算2*8?
2>>3
交换两个变量值?
1.用temp临时变量
int temp = num1;
num1 = num2;
num2 = temp;
2.过独木桥法
num1 = num1 +num2;
num2 = num1 - num2;
num1 = num1 - num2;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值