likes
comments
collection
share

Java 运算解析

作者站长头像
站长
· 阅读数 15

运算

  • i++ 与 ++i 的区别?

    i++ 表示先将 i 放在表达式中运算,然后再加 1,++i 表示先将 i 加 1,然后再放在表达式中运算

  • || 和 |,&& 和& 的区别,逻辑运算符

    & 和| 称为布尔运算符,位运算符;&& 和 || 称为条件布尔运算符,也叫短路运算符

    如果 && 运算符的第一个操作数是 false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是 false;同样,如果第一个操作数是 true,|| 运算符就返回 true,无需考虑第二个操作数的值;但 & 和 | 却不是这样,它们总是要计算两个操作数。为了提高性能,尽可能使用 && 和 || 运算符

  • 异或 ^:两位相异为 1,相同为 0,又叫不进位加法

  • 同或:两位相同为 1,相异为 0

  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

    String s = "a";
    switch (s) {
        case "a":
            System.out.println("aaa");
            break;
        case "b":
            System.out.println("bbb");
            break;
        default:
            break;
    }
    

    switch 不支持 long、float、double,switch 的设计初衷是对那些只有少数几个值的类型进行等值判断,如果值过于复杂,那么用 if 比较合适

  • break:跳出一层循环

  • 移位运算:计算机里一般用补码表示数字,正数、负数的表示区别就是最高位是 0 还是 1

    • 正数的原码反码补码相同,最高位为 0

      100:	00000000  00000000  00000000  01100100
      
    • 负数: 原码:最高位为 1,其余位置和正数相同 反码:保证符号位不变,其余位置取反 补码:保证符号位不变,其余位置取反后加 1,即反码 +1

      -100 原码:	10000000  00000000  00000000  01100100	//32位
      -100 反码:	11111111  11111111  11111111  10011011
      -100 补码:	11111111  11111111  11111111  10011100
      

      补码 → 原码:符号位不变,其余位置取反加 1

    运算符:

    • >> 运算符:将二进制位进行右移操作,相当于除 2
    • << 运算符:将二进制位进行左移操作,相当于乘 2
    • >>> 运算符:无符号右移,忽略符号位,空位都以 0 补齐

    运算规则:

    • 正数的左移与右移,空位补 0

    • 负数原码的左移与右移,空位补 0

      负数反码的左移与右移,空位补 1

      负数补码,左移低位补 0(会导致负数变为正数的问题,因为移动了符号位),右移高位补 1

    • 无符号移位,空位补 0