Java 六类运算符详解
作者:敬 之 发布时间:2023-08-27 20:37:37
在 Java 语言中,运算符有算数运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、条件运算符。
算数运算符
算数运算符是我们最常用的运算符,用于完成基本的算术运算。共包含以下几种,其中加减乘除不必多说,这里重点介绍后面几种。
算数运算符 | 表示 |
---|---|
加 | + |
减 | - |
乘 | * |
除 | / |
取余 | % |
自增 | ++ |
自减 | -- |
% 在 Java 中意为取模/取余,一个数取余另一个数,就意味着两数先做除法运算,然后将余数作为结果。如果余数为 0,那么这就是整除。
public static void main(String[] args) {
System.out.println(3%2); //3取余2,商1余1
System.out.println(8%2); //8取余2,商4余0,整除
System.out.println(2%8); //2取余8,商0余2
}
Java 中小数也是可以取余的,但我们在实际应用当中仅需掌握整数间的取余即可。
++ 和 -- 分别为自增、自减 1,可以使用在变量之前,也可以使用在变量之后。这里需要注意自增自减运算符在单独使用和被使用时的计算方法是不同的。
单独使用就是整个语句只有变量和自增自减运算符。
被使用是指该语句除了自增自减还包含着其他的任何操作。
① 单独使用时。自增自减在变量的前或后效果都相同;
public static void main(String[] args) {
int a=5,b=5;
//单独使用
a++; //相当于a=a+1
++b; //相当于b=b+1
System.out.println(a); //6
System.out.println(b); //6
}
② 被使用时。运算符在前,先将该变量自增/自减后再使用(使用的是经过运算后的变量);运算符在后,先使用完该变量,然后再将该变量进行自增/自减操作(使用的是未经运算的变量,即初始状态的变量)。如下以自增作为案例,自减原理相同:
++a的值为a+1 运算符在前,先将变量 a 自增,然后使用自增后的结果 a+1 进行操作。
a++的值为a 运算符在后,先使用变量 a 进行操作,使用完之后再对 a 进行自增。
public static void main(String[] args) {
int a=5,b=5;
//被使用
int c=a++; //运算符在后,先使用a的值赋给c,然后a再自增
int d=++b; //运算符在前,先将b自增,然后将结果b+1赋值给d
System.out.println(a); //6(到这步时a、b均已经完成了自增操作)
System.out.println(b); //6
System.out.println(c); //5
System.out.println(d); //6
}
关系运算符
关系运算符主要是用来比较两者大小关系的。包含以下几种:
关系运算符 | 表示 |
---|---|
大于 | > |
小于 | < |
大于 或 等于 | >= |
小于 或 等于 | <= |
等于 | == |
不等于 | != |
关系运算符的运算结果必定只有布尔值,即成立 true 或 不成立 false。
public static void main(String[] args) {
int a=5,b=10,c=5;
System.out.println(c<b); //true
System.out.println(b<c); //false
System.out.println(a>=c); //true
System.out.println(a!=c); //false
}
在 Java 语法的运算中,当不同运算符结合使用时,优先顺序也是不同的。算数运算符和关系运算符结合,采取“先算数再关系”的优先级。
public static void main(String[] args) {
int a=5,b=10,c=5;
System.out.println(a+c>20); //false,先计算a+c值为10,然后比较与20的关系
System.out.println(a%2==0); //false,先计算a%2值为1,然后比较与0的关系
System.out.println(a++>5); //false,先使用a对5进行比较,然后a自增1
System.out.println(++a>5); //true,先将a自增1,然后比较与5的关系
}
逻辑运算符
逻辑运算符用于把语句连接成更复杂的复杂语句,共包含三种:
逻辑运算符 | 表示 |
---|---|
逻辑与 | && |
逻辑或 | ‖ |
逻辑非 | ! |
逻辑运算是建立在关系运算基础之上的,所以它的运算结果也只有布尔值 true 或 false。
逻辑与 && 用于表达多个条件之间的并且关系,各个条件缺一不可,必须同时满足,所有条件均为真(true)整体才为真,只要有其中一个条件为假(false)则整体为假。
逻辑或 ‖ 用于表达多个条件之间的或者关系,无需同时满足,只要有其中一个条件为真则整体为真,只有当所有条件均为假时整体才为假。
逻辑非 ! 意为取反,非真则假,非假则真。
public static void main(String[] args) {
int a=5,b=10,c=5;
System.out.println(b>=a && b<c); //b>=a为true,b<c为false,true&&false=false
System.out.println(b>=a && b>c); //b>=a为true,b>c为true,true&&true=true
System.out.println(b>=a || b<c); //b>=a为true,b<c为false,true||false=true
System.out.println(b<a || b<c); //b<a为false,b<c为false,false||false=false
System.out.println(!(a>b)); //a>b为false,非false得true
System.out.println(!(a<=c)); //a<=c为true,非true得false
}
此外,逻辑与也称“短路与”,逻辑或也称“短路或”。短路是指在一条线路中的某个位置发生短路,则整个线路都会停止运行。将这个机制映射到逻辑与和逻辑或中也很明确:逻辑与,众多条件中从第一个条件开始只要看到有一个条件为 false,那么也就不用再往后看了,可确定它的整体已是 false,且 该条件之后的语句不会再被执行。逻辑或,众多条件中从第一个条件开始只要看到有一个条件为 true,则整体为 true,且 该条件之后的语句不会再被执行。这就是“短路与”、“短路或”名称的由来。
如下面的语句,三个条件进行逻辑与运算,当我们看到第一个条件 a>b 为 false 时,可以直接确定整个语句为 false,那么该条件之后的 c>3 和 b++>a 都不会再被执行运算,因此 b 在该语句也是不会自增的。逻辑或同理。
public static void main(String[] args) {
int a=5,b=10,c=5;
System.out.println(a>b && c>3 && b++>a); //false
}
赋值运算符
赋值运算符是 =,优先级低于其他运算符,所以赋值往往是最后执行的。分简单赋值运算符和扩展赋值运算符。简单赋值就是常见的 =,扩展赋值则是在简单赋值的基础上加入一些其他的运算,如 +=、-=、*=、/=、%=。
public static void main(String[] args) {
int a=5;
a += 10; //同等于a=a+10
System.out.println(a); //15
a *= 3; //同等于a=a*3
System.out.println(a); //45
}
字符串连接运算符
字符串连接使用 +,该符号很特别,如果两边是数字则进行加法运算,如果两边是字符串则进行连接。
char 字符型,放在单引号中,只能有一个。
String 字符串型,放在双引号中,数量不限。
public static void main(String[] args) {
System.out.println("我是CSDN博主:"+"敬 之"); //我是CSDN博主:敬 之
System.out.println("主页:"+"https://majinjian.blog.csdn.net"); //主页https://majinjian.blog.csdn.net
int age = 24;
System.out.println("我的年龄是"+age); //我的年龄是24
}
注意字符串类型具有同化性质,无论什么类型的值跟字符串连接都会成为字符串类型。如下面的语句,1+2 先进行加法运算得 3,此时 3 与字符串 “3” 连接,就变成了 “3”,后面的 4 也与字符串 “3” 连接,变成了 “4”,最后输出字符串 “334”。
public static void main(String[] args) {
System.out.println(1+2+"3"+4); //334
}
条件运算符
条件运算符也称三目运算符,同时对三个条件进行操作。语法格式如下:
boolean?数1:数2
整个条件运算的值为数 1 或者数 2,所以最终得到的结果是这里面二选一。整个执行过程是先判断 boolean 的值,值为 true 得数 1,值为 false 得数 2。
public static void main(String[] args) {
int number = 5;
int number1 = number>0?33:66; //值为true得数1
int number2 = number>6?33:66; //值为false得数2
System.out.println(number1); //33
System.out.println(number2); //66
}
来源:https://blog.csdn.net/weixin_53072519/article/details/129347323
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 今天,简单讲讲如何监听手机屏幕是否锁屏。实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN
- 1.添加命名空间System.IO;System.Text;2.文件的读取(1).使用FileStream类进行文件的读取,并将它转换成ch
- 简单工厂简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。定义了一个创建对象的类,由
- 本文实例为大家分享了Android实现轮播图片效果的具体代码,供大家参考,具体内容如下一、原理首先,将这些要轮播的图片和一些文本分别放置在不
- 关于Unity的换装,网上有几篇文章,我之前也简单的描述过实现。不过那个时候只是粗略的试验了下。今天好好梳理了下代码。先上代码(自己的游戏项
- Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1。Mybatis-Plus原生提供了很多单表操作的方法,极大
- 本文以实例详细描述了C#定义并实现单链表的过程及原理。一般来说C#定义并实现单链表,代码包括构成链表的结点定义、用变量来实现表头、清空整个链
- 本文实例为大家分享了Java实现计算器设计的具体代码,供大家参考,具体内容如下需求分析目的是实现一个基于Java的可以求解带括号加减乘除表达
- maven项目install时忽略执行test在项目所在文件夹根目录使用maven命令打包时<!-- 不执行单元测试,也不编译测试类
- 本文实例讲述了Android编程自定义菜单实现方法。分享给大家供大家参考,具体如下:在android开发的过程中系统自带的菜单往往满足不了开
- 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢?我们考虑一个简单的赋值问题:in
- 定义在类里面的类就叫做内部类。内部类的特点:在内部类中可以直接访问外部类的成员,包括私有的成员在外部类中不能直接访问内部类的成员,必须通过创
- Struts2 * Struts2 * 的概念和Spring Mvc * 一样。1.Struts2 * 是在访问某个Action或Actio
- 这篇文章主要介绍了springboot整合通用mapper过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 本文实例讲述了Java基于Tcp的基础聊天功能。分享给大家供大家参考,具体如下:最基础的聊天,用户端和服务器端每次说一句,而且严格规定了先后
- Android webview在默认情况下是不支持网页中的文件上传功能的;如果在网页中有<input type="file&
- 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下。在我刚开始工作接触的项目
- 本文实例讲述了Android编程实现将压缩数据库文件拷贝到安装目录的方法。分享给大家供大家参考,具体如下:public void copyZ
- 简介我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的,
- 这种属性应用方式是field_name=@field_value@。两个@符号是springboot为替代${}属性占位符产生,原因是${}