Nibbles Blog Nibbles Blog
  • 专题汇总
    • 技术学习
    • 个人成长
    • 运营技能
    • 自媒体
    • Minecraft
  • 推荐
    • 好物推荐
    • APP推荐
  • 关于我
    • Nibbles Studio
  • 友情链接
首页 › 技术学习 › 运算符 | Java语言基础

运算符 | Java语言基础

Avatar photo
Nibbles 尼布
30 6 月, 2025

运算符 不仅是 Java ,在众多编程语言中基本上都是相通的,学会迁移。

Java中运算符可分为以下:算术运算符(基本+ - * /,增量+= -= *= %=,自增++/自减--)、关系运算符(< > == !=)、逻辑运算符(&& || ! & |)、位运算符(& | ^ ~ )、移位运算符(<< >> >>>)以及条件运算符等。

算数运算符

算数异常

做除法和取模的时候右操作数不能为0,否则会出现“除0异常”

public class Test {
    public static void main(String[] args) {
        int a = 20;
        int b = 0;
        System.out.println(a/b);
    }
}
运算符 | Java语言基础-Nibbles Blog

这里 ArithmeticException 代表这里是一个算数异常的结果,后面 / by zero代表 “除0” ,第二行是定位错误在哪一行。

取模规则

public class Test {
    public static void main(String[] args) {
        int c = 7;
        int d = 3;
        System.out.println( c %  d); // 1
        System.out.println(-c %  d); //-1
        System.out.println( c % -d); // 1
        System.out.println(-c % -d); //-1
    }
}
  • Java 中 % 运算符的规则是:余数的符号与被除数相同。
  • 对于正数,余数就是通常的”除法余数”。
  • 对于负数,余数会按照规则调整,以确保余数的符号与被除数一致,且余数的绝对值小于除数的绝对值。

而且在Java语言中取模支持运算符两边均为浮点数,和C语言两边均为整数不同。

public class Test {
    public static void main(String[] args) {
        System.out.println(25.5%2.0); // 1.5
    }
}

自增运算符

如果num为一个已定义的整型变量,形如 num++ 或 ++num 的表达式中 ++ 代表自增,同理,-- 代表自减。

如果单独使用这两个效果一样。都是表示为直接+1。而混合使用则分为两种:

  • 前置 ++ :先给变量+1,然后使用变量的值;
  • 后置 ++ :先使用变量原来的值,再表达式结束后给变量+1;
public class Test {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(a++); // 11
        System.out.println(a);   // 12
    }
}
public class Test {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(++a); // 12
        System.out.println(a);   // 12
    }
}

关系运算符与逻辑运算符

C语言中也有相通的《从猜数字程序来理解结构和随机数 – 3.1 Intro》

关系运算符有> < != == >= <=,返回 true 或 false.

同样的,和C语言一样,形如 0<a<9 多次判断是不能连着写的(已定义整型变量a),要写成 a>0 && a<9 。因为原来的错误写法,如果判断的话,假设 a>0 结果确实是 true 了,但是后面判断就是 true<9 这样是无法比较的。

public class Test {
    public static void main(String[] args) {
        int a=10;
        System.out.println(a>10);  // false  正确写法
        //错误写法: System.out.println(1<a<11);
        System.out.println(a>1 && a<11); // true 正确写法
        System.out.println(a>10!=true); // true 正确的连续判断写法
    }
}

逻辑运算符有与&& (也有单&)或|| (也有单|)非! ,注意与和或操作两边的表达式是结果为boolean类型的表达式。

  • 与:有false出false,全true才true
  • 或:有true出true,全false才false
  • 非:即对立,!true==false !false==true

逻辑运算符的短路求值

短路求值就是提前判定,遵循着上述的“有x出x”。

  • 对于 && , 如果左侧表达式值为 false, 则总表达式结果⼀定是 false, ⽆需计算右侧表达式.
  • 对于 || , 如果左侧表达式值为 true, 则总表达式结果⼀定是 true, ⽆需计算右侧表达式.

所以这样的话,如果左侧表达式值能直接影响整个表达式结果的话,那么提前“短路”。这样即使右边表达式出错,也仍可以输出整个表达式的值。

public class Test {
    public static void main(String[] args) {
        System.out.println(10 > 11 && 10 / 0 == 0);  // 左侧为false,与逻辑中有false出false,所以提前短路
        System.out.println(10 < 11 && 10 / 0 == 0);  // 左侧为true,那么结果要取决于右侧,右侧表达式错误,所以抛出异常
    }
}

如果不希望短路求值,可以使用单 & 表示与和单 | 表示或。 但一般用得频率也比较少。

位运算符

Java 中数据存储的最⼩单位是字节,⽽数据操作的最⼩单位是位(bit)。

位运算符有四个 & | ~ ^,只有 ~ 是一元运算符。

位操作表⽰按⼆进制位运算,按位运算就是在按照⼆进制位的每⼀位依次进⾏计算。

运算符 | Java语言基础-Nibbles Blog

对于 ^ 异或来说:那就是相同为0,不同为1。(可以想象成“找不同”)

对于 ~ 按位取反操作来说,可以说是把二进制写出来后逐位取反。

public class Test {
    public static void main(String[] args) {
        System.out.println(0xa); // 10
        System.out.printf("%x\n",0xa);  //a,以十六进制输出
        System.out.printf("%32s\n",Integer.toBinaryString(0xa)); // 00000000000000000000000000001010
        System.out.println(~0xa);  // -11
        System.out.printf("%x\n",~0xa);  //fffffff5,以十六进制输出
        System.out.printf("%s\n",Integer.toBinaryString(~0xa));  // 11111111111111111111111111110101
    }
}

移位运算符

移位运算符有三个,<< 左移,>> 右移,>>> 无符号右移 (不存在无符号左移)。不常用,了解即可。对于一个正数来说,有如下规律

  • 左移:写出二进制并左移且右边补0,结果为 <原值>*2的<位数>幂次方
  • 右移:写出二进制并右移左边补符号位,结果为 <原值>/2的<位数>幂次方
  • 无符号右移:写出二进制并右移左边始终补0

条件运算符

格式 : <条件>?<真时执行>:<假时执行> 同C语言中的。

运算符优先级

不好记忆的话,那就加上括号调整优先级吧!

声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
Java
0
0
Avatar photo
Nibbles 尼布
向着终生成长者迈进!
赞赏

评论 (0)

取消
    发表评论

猜你喜欢

  • 变量详解 | Java语言基础
  • 初识 Java 及数据类型 | Java语言基础
  • 从本质理解指针的那些知识 | C语言基础

公众号同步更新

🔍微信搜一搜“尼布技术志”

文章目录

  • SiteMap
  • Umami
  • CSDN
  • xLog「待开放」
  • Substack「待开放」
Copyright © 2022-2025 Nibbles Blog. Designed by nicetheme. 浙公网安备33038102332481号 浙ICP备2024120131号
旗下产品: 匿补阁 个人工作室主页 Nibbles AI 匿补阁小商城 匿补阁CardShop NavP
  • C语言4
  • Java4
  • python2
  • AI2
  • 公众号2
  • 专题汇总
    • 技术学习
    • 个人成长
    • 运营技能
    • 自媒体
    • Minecraft
  • 推荐
    • 好物推荐
    • APP推荐
  • 关于我
    • Nibbles Studio
  • 友情链接