尚硅谷_Java 学习笔记day3

运算符

运算符是一种特殊符号,用以表示数据的运算、赋值和比较等

算数运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符、三元运算符

算数运算符

运算符 运算 范例 结果
+ 正号 + 3 3
- 负号 b = 4; - b -4
+ 5 +5 10
- 6 - 4 2
* 3 * 4 12
/ 5 / 5 1
% 取模(取余) 7 % 5 2
++ 自增(前),先运算后取值<br />自增(后),先取值后运算 a = 2; b = ++ a;<br />a + 2; b = a ++; a = 3; b = 3<br />a = 3; b = 2
-- 自减(前),先运算后取值<br />自减(后),先取值后运算 a = 2; b = – a;<br />a + 2; b = a –; a = 1; b = 1 <br />a = 1; b = 2
+ 字符串连接 “He”+“llo” “Hello”
class AriTest{
    public staic void main(String[] args){
    //取余运算结果的符号与被模数的符号相同:
        int m1 = 12;
        int n1 = 5;
        System.out.pringtln("m1 % n1 =" + m1 % n1);
        int m2 = -12;
        int n2 = 5;
        System.out.pringtln("m2 % n2 =" + m1 % n1);
        int m3 = 12;
        int n3 = -5;
        System.out.pringtln("m3 % n3 =" + m1 % n1);
        int m4 = -12;
        int n4 = -5;
        System.out.pringtln("m4 % n4 =" + m1 % n1);
    //(前)++:先自增,后运算
    //(后)++:先运算,后自增
        int a1 = 10;
        int b1 = ++a1;
        System.out.println(b1);
        int a2 = 10;
        int b2 = a1++;
        System.out.println(b2);
        }
}
/*
数子153输出:
百位数:1
十位数:5
个位数;3
*/
class AirExer{
    public static void main(String[] args){
        int num = 153;
        int bai = num / 100;
        int shi = num % 100 / 10;
        int ge = num % 10;
        System.out.println("百位数:" + bai);
        System.out.println("十位数:" + shi);
        System.out.println("百位数:" + ge);
    }
}
  • ==取余运算结果的符号余被模数的符号相同==
  • 开发中经常使用%判断能否被除尽的情况

赋值运算符

符号:=

  • =两侧数据类型不一致时,可以使用自动类型转换或者强制类型转换原则进行处理
  • 支持连续赋值
  • 扩展赋值运算符:+=,-=,*=,/=,%=
class SetValueTest{
    public static void main(String[] args){
        //赋值
        int i1 = 10;
        int j1 = 10;
        
        //连续赋值
        int i2,j2;
        i2 = j2 = 10;
        
        //自增赋值
        int num1 = 10;
        num1 += 2;//num1 = num1 + 2;
        
        int num2 = 12;
        num2 %= 5;//num2 = num2 % 5;
        
        //s1 = s1 + 2;//数据类型不统一,编译失败
        short s1 = 10;
        s1 += 2;//不会改变变量本身的数据类型
    }
}

==用赋值运算符做运算不会改变变量本身的数据类型==

比较运算符

运算符 运算 范例 结果
== 相等于 4 == 3 false
|= 不等于 4 |= 3 true
< 小于 4 < 3 false
> 大于 4 > 3 true
<= 小于等于 4 <= 3 false
>= 大于等于 4 >= 3 true
  • 比较运算符的结果都是boolean型,(truefalse
  • 比较运算符==不能误写成=(赋值运算符)

逻辑运算符

& 逻辑与 |逻辑或 !逻辑非

&&短路与 ||短路或 ^_逻辑异或

a b a&b a&&b a|b a||b !a A^b
true true true true true true false false
true false false false true true false true
false true false false true true true ture
false false false false false false true false
//逻辑与、短路与的区别:
class LogicTest {
    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(b1 && (num2++ > 0)){
            System.out.println("我在南京");
        }else{
            System.out.println("我在北京");
        }
        System.out.println("num2 =" + num2);
    }
}

逻辑与、短路与的区别:

  • &&&的运算结果相同
  • 当符号左边为true时,二者都会执行符号右边的运算
  • 当符号右边为false时,&继续执行符号右边的运算,&&不再执行符号右边的运算

同理,逻辑或、短路或的区别:

  • |||的运算结果相同
  • 当符号左边为false时,二者都会执行符号右边的运算
  • 当符号右边为true时,|继续执行符号右边的运算,||不再执行符号右边的运算

实际开发中推荐使用&&||

位运算符

运算符 运算 细节 范例
<< 左移 空位补 0 ,被移除的高位丢弃 3 << 2 = 12 → 3 * 22 = 12
>> 右移 最高位是 0 时,空位补 0 <br />最高位是 1 时,空位补 1 3 >> 1 = 1 → 3 / 21 =1
>>> 无符号右移 空位补 0 3 >>> 1 = 1 → 3 / 21 =1
& 与运算 二进制位进行&运算,只有1&1时结果为1,否则为0 6 & 3 = 2
| 或运算 二进制位进行` 运算,只有0 0`时结果为0,否则为1 6 | 3 = 7
^ 异或运算 相同二进制位进行^运算,结果是0<br />不同二进制位进行^运算,结果是1 6 ^ 3 = 5
~ 取反运算 正数取反,各二进制码按补码各位取反<br />负数取反,各二进制码按补码各位取反 ~6 = -7

m = k ^ n =(m ^ n)^ n

三元运算符

(条件表达式)?表达式1 : 表达式2

  • 条件表达式的结果为boolean类型

  • 根据条件表达式真或假,决定执行表达式 1,还是表达式 2

    如果表达式为 true,则执行表达式 1

    如果表达式为 false,则执行表达式 2

  • 表达式 1 与表达式 2 要求是一致的

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

  • 凡可以使用三元运算符的地方都可以改写为 if — else,反之则不行

    优先使用三元运算符(简洁、执行效率高)

class SanYuanTest{
    public static void(Strings[] args){
        int m = 12;
        int n = 5;
        int max =( m > n ) ? m : n;
        System.out.println(max);
        //********************************
        n = 2;
        String maxStr = (m > n)?"m大" : ((m == n)?"m和n相等" : ”n大);
        System.out.println(maxStr);
        //******************************
        //获取三个数中的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;
        int max1 = (n1 > n2)? n1 : n2;
        int max2 = (max1 >n3)? max1 : n3;
        System.out.println(max2);
        
    }     
}

运算符的优先级

运算符有不同的优先级(运算顺序)

只有单目运算符、三元运算符、复制运算符是从右向左运算的

实际开发中更常用()提升优先级,注重代码可读性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容