🍔🍔🍔虽然有一点点基础还是系统学习一下吧,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;