Java中六大运算符介绍(#算数运算符#赋值运算符#比较/关系运算符#逻辑运算符#位运算符#三元运算符)

  • 算数运算符

 算数运算符的注意事项

对于除号“ /” ,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
int num1 = 2;
int num2 =5;
int result1 = num2/num1;//3  整数之间做除法时,只保留整数部分而舍弃小数部分
System.out.println(result1);

//解决方法:先转成double类型,在运算
double result2 = (double) num2/num1;//2.5
double result3 = num2/((double)num1);//2.5
double result4 = num2/((num1 + 0.0));//2.5
double result5 = (double) (num2/num1); //2.0 先运算在转换类型结果就舍弃小数部分了
System.out.println(result4);
如果对负数取模,可以把模数负号忽略不记,如: 5%-2=1。 但被模数是 负数则不可忽略。此外,取模运算的结果不一定总是整数。
//结果的符号与被模数的符号相同
//开发中,经常使用%来判断能否被除尽的情况。
int num1 = 5;
int num2 = 2;
System.out.println("num1 % num2=" + num1 % num2);//num1 % num2=1

int num3 = -5;
int num4 = 2;
System.out.println("num3 % num4=" + num3 % num4);//num3 % num4=-1

int num5 = 5;
int num6 = -2;
System.out.println("num5 % num6=" + num5 % num6);//num5 % num6=1

int num7 = -5;
int num8 = -2;
System.out.println("num7 % num8=" + num7 % num8);//num7 % num8=-1
+” 除字符串相加功能外,还能把非字符串转换成字符串。
int num1 = 3;
int num2 = 4;
System.out.println("num1 + num2 ="+ num1 + num2);//num1 + num2 =34
System.out.println("num1 + num2 ="+ (num1 + num2));//num1 + num2 =7

自增(++)、自减(--)

(前)++ :先自增1,后运算; (后)++ :先运算,后自增1

int a = 10;
int b = ++a;
int c = a++;
System.out.println("a="+a+",b="+b+",c="+c);//a=12,b=11,c=11

(前)-- :先自减1,后运算;(后)-- :先运算,后自减1

int a1 = 10;
int b1= --a1;
int c1 = a1--;
System.out.println("a1="+a1+",b1="+b1+",c1="+c1);//a1=8,b1=9,c1=9

注意点:自增1不会改变本身变量的数据类型 

short s = 10;
//s = s + 1;//不兼容的类型: 从int转换到short可能会有损失
s = (short)(s + 1);//s=11
s++;//s=12
System.out.println(s);
  • 赋值运算符

赋值运算符_"="(单个赋值)

int i1 = 10;
int i2 = 10;

赋值运算符_"="(连续赋值)

int j1,j2;
j1=j2=10;
int j3 = 10,j4 = 10;

赋值运算符_"+=, -=, *=, /=, %="

int i = 10;
i += 2;//相当于i = i+2
i %= 2;//相当于i = i%2
System.out.println(i);

Test:开发中,如果希望变量实现+1操作的几种方式

int j = 10;
j = j + 1;//方式一
j += 1;//方式二
j++;//方式三(推荐)
  • 比较运算符

 结论:1.比较运算符的结果都是boolean型,也就是要么是true,要么是false

          2.比较运算符“==”不能误写成“=” 。

int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a = b);//a=20
  • 逻辑运算符

&—逻辑与    && —短路与      | —逻辑或    || —短路或      ! —逻辑非      ^ — 逻辑异或

 & 与 &&

相同点:1. & 与  && 的运算结果相同
               2. 当符号左边是true时,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
开发中,推荐使用&&

boolean b = false;
int num = 10;
if (b & num++ > 0){//符号左边是false时,&继续执行符号右边的运算,num+1
    System.out.println("上班");
}else{
    System.out.println("下班");
}
System.out.println("num=" + num);//num=11

if (b && num++ > 0){  //符号左边是false时,&&不在执行符号右边的运算,num不变
    System.out.println("上班");
}else{
    System.out.println("下班");
}
System.out.println("num=" + num);//num=11

| 与 || 

相同点:1. | 与  || 的运算结果相同
               2. 当符号左边是false时,二者都会执行符号右边的运算
不同点:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
开发中,推荐使用||

boolean b = true;
int num = 10;
if (b | num++ >0){//符号左边是true时,|继续执行符号右边的运算 故num+1
    System.out.println("上班");
}else {
    System.out.println("下班");
}
System.out.println("num=" + num);//num=11


if (b || num++ >0){//符号左边是true时,||不再执行符号右边的运算 故num不变
    System.out.println("上班");
}else {
    System.out.println("下班");
}
System.out.println("num=" + num);//num=11

!(逻辑取反运算) 

boolean b = true;
int num = 10;
System.out.println(!(num>0));//false
System.out.println(!b);//false

 ^(逻辑异或运算)——二边相同为false,二边不同为true

boolean b1 = true;
boolean b2 = false;
int num = 10;
System.out.println(b1^(num > 0));//false(两边都为true)
System.out.println(b1^(num < 0));//ture(前边true,后边false)
System.out.println(b2^(num > 0));//ture(前边false,后边true)
System.out.println(b2^(num < 0));//false(两边都为false)

说明:逻辑运算符操作的都是boolean类型的变量

  • 三元运算符

概述

1.结构:(条件表达式)? 表达式1 : 表达式2
2. 说明
① 条件表达式的结果为boolean类型
② 根据条件表达式真或假,决定执行表达式1,还是表达式2.
  如果表达式为true,则执行表达式1。
  如果表达式为false,则执行表达式2。
③ 表达式1 和表达式2要求是一致的。

int a = 10;
int b = 20;
int num = (a > b)? 10 : 20;
double num1 = (a > b)? 10 : 20.0;
String str = (a > b)? "ii" : "jj";
//int num2 = (a > b)? 10 : "ss";//条件表达式中的类型错误
System.out.println(str);

④ 三元运算符可以嵌套使用

int a = 10;
int b = 10;
String s = (a > b) ? "a大" : ((a < b) ? "b大" : "a和b相等");
System.out.println(s);

3. 凡是可以使用三元运算符的地方,都可以改写为if-else反之,不成立。

4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁、执行效率高。

Test_获取三个数中的最大值

int a = 10;
int b = 20;
int c = -20;
//方式一:
int max1 = (a > b) ? a : b;
int max2 = (max1 > c) ? max1 : c;
System.out.println(max2);
//方式二:(不建议使用)
int max3 = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c;
System.out.println(max3);
//方式三:
if (a >b && a > c){
    System.out.println(a);
}else if(a > b && a < c){
    System.out.println(c);
}else{
    System.out.println(b);
}
  • 位运算符

位运算符移动的细节 

 结论

1. 位运算符操作的都是整型的数据
2. << :在一定范围内,每向左移1位,相当于 * 2
   >> :在一定范围内,每向右移1位,相当于 / 2

int a = 21;
System.out.println("a << 2 =" + (a << 2));//84(相当于21*2*2)
System.out.println("a << 27 =" + (a << 27));//-1610612736(到一定范围会将符号位变为1,改变其为负数)
System.out.println(a);//a=21
System.out.println("a >> 2=" + (a >> 2));//5(相当于21/(2*2))

3. 对于负数来说:
        >> 右移以后,最高空出来的位拿 1 去补
        >>> 右移以后,高空出来的位拿 0 去补

 4. &_与运算

System.out.println("12 & 5=" + (12 & 5));

 5. |_或运算

System.out.println("12 | 5=" + (12 | 5));

 6.  ^_异或运算

异或运算有一个结论: 若m^n,则m=(m^n)^n,n=(m^n)^m

 Test_交换两个变量的值

int a= 10;
int b= 20;

//方式一:定义临时变量的方式(推荐)
int temp = a;
a = b;
b = temp;
System.out.println("a=" + a + ",b=" + b);

//方式二:好处:不用定义临时变量。弊端:① 相加操作可能超出存储范围 ② 有局限性:只能适用于数值类型
a = a + b;
b = a - b;
a = a - b;
System.out.println("a=" + a + ",b=" + b);

//方式三:使用位运算符,有局限性:只能适用于数值类型
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a + ",b=" + b);

 7.  ~_取反运算

 System.out.println("~6 =" + (~6));

  • 运算符的优先级

*运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行。
*只有单目运算符、三元运算符、赋值运算符是从右向左运算的。

说明:本篇文章部分内容和图片引用尚硅谷官网内容,特此说明。@尚硅谷官网地址 


版权声明:本文为m0_58052874原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。