Java的表达式和运算符
一、算术运算符
运算符 |
+ |
- |
* |
/ |
% |
说明 |
加 |
减 |
乘 |
除 |
取模(余数) |
例子 |
1+2 |
5-3 |
20*5 |
6/4 |
30%9 |
结果 |
3 |
2 |
100 |
1 |
3 |
int x = 10;
int y = 6;
int result=x/y;
System.out.println(result);
其结果是1,不会带有小数部分,也就是整数运算后的到的结果也是整数,不会自动变成浮点数。
上面所具的例子都是表示二元运算符,也就是说有两个运算参数,其中“+”和“-”两个符也可以表示一元运算符,分别表示正数和负数这些运算符也可以组合成为一个复杂的运算式子,如下面这个例子:
int x = 10,y = 6,a = 20,b = 2;
int result=-x/y+a-b+a%x+-a;
System.out.println(result);
上面示例会先计算小括号的x+y和a-b两个式子,然后在按照先先乘除后加减,从左到右的计算顺序。
二、赋值运算符
运算符 |
= |
+= |
-= |
*= |
/= |
++ |
-- |
说明 |
赋值 |
加等于 |
减等于 |
乘等于 |
除等于 |
自增1 |
自减1 |
例子 |
x=10 |
x+=y; |
y-=5; |
y*=z-3; |
z/=3; |
y++; |
x-- |
等价于 |
x=x+y; |
y=y-5; |
y=y*(z-3); |
z=z/3; |
y=y+1; |
x=x-1; |
程序中“=”的意义与我们平时的数学计算的式子不同,他表示赋值的意思,就是把赋值表达式中右边的计算结果赋值左边的变量中。如下面这里例子都是赋值运算:
int x=5; //用专业的说法是把右边5的值赋值给左边的int变量x
int y=x=6; // y和x都赋值6;
int a;
a=100+200;
在赋值运算时,经常会出现左边的变量重复出现在赋值表达式的右边,如:
int a=100;
a=a+200;
a=a+200; 等价于以下形式:
a+=200;
归纳一下也就是,如果expr1和expr2分别代码两个表达式,op代表运算符号,那么:
expr1=(expr1) op (expr2)
等价于
expr1 op= expr2;
注意第一个表达式,有时候括号是不可缺少的,比如以下这个例子:
int a=10,b=3;
a*=b+1;
其意思是:
a=a*(b+1);
而不是:
a=a*b+1;
三、自增1和自减1
我们要实现一个数的自增1或者自减1,目前可以有以下两种方法:
a=a+1或者a+=1;
a=a-1或者a-=1;
但是由于在编写程序时自增1或者自减1用得非常频繁,java语言提供了两个专门用于变量的自增1和自减1的特殊运算符,其中++是自增1运算符号,可以使操作数自增1,--是自减1运算符号,可以使操作数自减1。比如下面这个例子就是自增1:
int i=1;
i++;
System.out.println(i);//结果是2
需要特别留意的是++和--运算符可以前置、后置,都是合法的语句,如a++和++a都是合法的,上面这两种写法其最终的结果都是是变量a的值加1了,但是它们之间也是有区别的,其区别是:表达是++a会先将a的值自增1,然后在使用变量a。而表达式a++是先使用了a的值,然后再让a的值自增1。也就是说在一些表达式,使用a++和使用++a得到的结果时不一样的。例如:
int a=1;
int b= a++;
System.out.println(b);//这时候b是1
int a=1;
int b= ++a;
System.out.println(b);//这时候b是
int a=1,b=1,c;
c=++a+b++;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c); //c最后的值是3
最后再提一下++和--两个运算符都只能作用于变量,而不作用域表达式。如下面这个例子是非法的。
int a=1,b=1;
(a+b)++;
四、比较运算符
比较运算符也称为关系运算符,用于测试两个操作数之间的关系。使用关系运算符表达式的最终结果为 boolean 型,也就是其结果只有两个true和false。具体运算符号如下表所示:
运算符 |
== |
!= |
> |
< |
>= |
<= |
比较 |
等于 |
不等 |
大于 |
小于 |
大于等于 |
小于等于 |
例子 |
i==1; |
i!=1; |
i >1; |
i<1; |
i>=1; |
i<=1; |
结果 |
true |
false |
false |
false |
true |
true |
由上表所示,我们判断两个数是否相等使用两个等号(==),它与(!=)具有相同的优先级。比>、<、>=、<=的优先级要高,但是算术运算符的优先级比关系运算符高,也就是说i<a+100和i<(a+100)等结果都是一样。不同数据类型之间也可以进行比较,它们会被自动转换为相同的类型后再比较,如以下例子:
int x = 10;
float y=10.9f;
char a='0';
System.out.println(x>y);
System.out.println(a>x);
五、逻辑运算符
运算符 |
& |
| |
! |
&& |
|| |
说明 |
与 |
或 |
非 |
阻断与 |
阻断或 |
示例 |
true&false |
True|false |
!false |
true&&false |
true||false |
结果 |
false |
true |
true |
false |
true |
逻辑运算符非常重要,尤其是在学习了后面的条件判断后,会大量使用这些逻辑运算符。
1、与运算
与运算符号有&和&&两个,表示必须两个条件都为true时,结果才能返回true。如:
(1>2)&&(1>3) (1>2)&&(3>1) (2>1)&&(1>3) (2>1)&&(3>1)
其对应比较运算过程就是
false&&false false&&true true&&false true&&true
也就是最后的结果就是前面三个的返回都是false,只有最后一个是true。
2、或运算
或运算符号有|和||两个,表示两个条件只要有一个满足为true,最后结果返回true。还是以上面例子说明如:
(1>2)&&(1>3) (1>2)&&(3>1) (2>1)&&(1>3) (2>1)&&(3>1)
其对应比较运算过程就是
false&&false false&&true true&&false true&&true
也就是最后的结果就是第一个返回为false,后面三个返回都是true。
3、取反运算符
取反运算符只有一个!,它是单元运算符,这个比较简单,如果是true就返回false,false就返回true,如下面的示例:
!(1>2) !(2>1)
其对应比较运算过程就是
!false !true
所以第一个返回是true,第二个返回是false。
4、组合的逻辑运算符
逻辑符可以组合使用,并结合上面比较运算符,形成一个复杂的条件判断,比如下面这个判断是否是闰年的条件判断式,闰年的判断条件是,如果此年份是4的陪数,但不是100的陪数,那么就是闰年,如果是100的陪数,还要是400的倍数才是闰年,实现代码如下:
int year=2008;
boolean result=year%4==0&&year%100!= 0||year % 400 == 0;
5、 &和&&、|和||的区别
参与运算的都是boolean布尔类型,在上表中的逻辑运算符&和&&、|和||的示例中,结果的都是一样的,但是在运算时却有区别。&&和||有一些比较特殊的属性,其运算的顺序是从左至右进行判断的,但是对&&而言如果在判断时得到的结果是false时,那么后面的计算就不会继续,对||而言,如果在判断时得到的结果是true,那么后面的计算也不会继续,这种机制称之为阻断判断或者短路判断,在有些情况之下,这种机制可以提高程序运行的效率。
int x=1,y=2;
boolean b;
b=x>y&&++x==--y;
b, x, y的值分别是false, 1, 2。x和y虽然上面都有自增和自减的表达式,但是却并没有执行,那是因为x>y的结果是false,后面使用了短路判断&&,所以不管后面的表达式的结果是什么,最后的结果必然是false,所以后面的++x和--y其实都没有执行过,如果改成以下例子:
int x=1,y=2;
boolean b;
b=x>y&++x==--y;
因为使用了&符号,所以b, x, y的值是false, 2, 1了。
六、条件运算符
java的条件运算符是三元运算符,也就是说有三个参数参与运算,其功能是对表达式条件进行判断,根据判断结果是true或者false两种情况赋予赋予不同的返回值,其语法如下:
表达式?值1:值2;
int a=2;
int b=1;
int c=(a>b)?3:4;
System.out.println(c);
七、位运算符
位运算符在java的企业应用中使用的频率并不高,但是在一些追求效率和编写底层应用时,还是会用到位运算符,前面介绍的各种运算都是基本都是以字节作为最基本位进行运算的,而位运算符是以位(bit)作为运算单位的,所以要弄明白位运算符,必须要知道二进制表示法。
int a=1;//int 是 32 位 取最后的8位是 00000001按位位与运算符"&"就是实现参与运算的两个数对应的二进制位数执行与的操作。如果两个二进位均为1时,结果位才为1,否则就为0。前面介绍过,计算机都是采用补码的方式运行的,所以参与运算的数都是补码方式进行的。如下面所示例子:
1、按位与
int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a&b);//结果是 00000001
如代码所示00000001和00000101运算的结果是00000001。所以最后输出的结果是1 。
2、按位或
按位或运算符“|”就是实现参与运算的两个数对应的二进制位数执行或的操作。如果两个二进位均为0时,结果位才为0,否则就为1。我们继续以上面所示的例子:
int a=1;//int 是 32 位 取最后的8位是 00000001
int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a|b);//结果是 00000101
如代码所示00000001和00000101运算的结果是00000001。所以最后输出的结果是5。
3、按位异或
按位异或运算符“^”就是实现参与运算的两个数对应的二进制位数执行异或的操作。如果两个二进位相同时,结果位为0,不同时就为否1,简称“同0异1”。也就是说两个都是1或者两个都是0时结果为0,否则为1。还是以上面作为例子
int a=1;//int 是 32 位 取最后的8位是 00000001
int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a^b);//结果是 00000100
如代码所示00000001和00000101运算的结果是00000100。所以最后输出的结果是4
4、求反
求反运算符只是单目运算符,具有右结合性,这个功能比较简单,就是对参与运算的数的各二进位按位求反。但是这个结果需要补码的运算有所了解才行。
//int 是 32 位 对应二进制就是 00000000 00000000 00000000 00000001
int a=1;
//结果也是 32 位 对应的二进制是 11111111 11111111 11111111 11111110
System.out.println(~a);
因为部门的第一位是符号位,按照补码的运算,对应的结果就是-2了。
5、左移
左移运算符“<<”其功能把“<<”左边的运算数的各二进位根据右边定义的数量全部左移若干位,移动的数位由右边所定义的数量决定。 移动时依据高位丢弃,低位补0的原则。
int a = 2;//int 是 32 位 取最后的8位是 00000010
System.out.println(a<<1);//左移一位后就是 00000100
最后输出的结果是4,由上面的示例可知,每左移一位后,所得到的结果就是原来的数据乘以2,所以很多时候我们在做乘以2的操作是都是使用这个左移操作,以提高效率。
6、右移
右移运算符“>>”其功能把“>>”左边的运算数的各二进位根据右边定义的数量全部右移若干位,移动的数位由右边所定义的数量决定。 也是按照移动时依据高位丢弃,低位补0的原则。
int a = 12;//int 是 32 位 取最后的8位是 00001100
System.out.println(a>>2);//左移一位后就是 00000110
结果是3,由上面的示例可知,和左移正好相反,每右移一位后,所得到的结果就是原来的数据除以2,所以很多时候我们在做除以2的操作是都也是使用这个由移操作,以提高效率。
Java的表达式和运算符的更多相关文章
- Python基础0:变量 赋值 表达式和运算符
变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...
- Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...
- Javascript学习2 - Javascript中的表达式和运算符
原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...
- JavaScript深入浅出补充——(一)数据类型,表达式和运算符
项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...
- C#图解教程 第八章 表达式和运算符
表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移 ...
- 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符
[表达式和运算符]原始表达式,初始化表达式(对象和数组的),函数定义表达式,属性访问表达式,调用表达式,对象创建表达式,运算符概述,算术表达式,关系表达式,逻辑表达式,赋值表达式,表达式计算,其他运算 ...
- Python3基础-表达式和运算符
表达式和运算符 什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数. 1+2*3经过计算后得到的结果是7,我们可以将计算结果存放在一个变量里,result=1+ ...
- Python --表达式和运算符
表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 运算符 由一个以上的值经过变化得到新值的过程就叫做运算 用于运算的符号称为运算符 运算符的分类: 算数运算符 比较或者关 ...
- Java基础 - 数据类型和运算符
Java 语言支持的类型分为两类:基本数据类型(Primitive Type)和引用类型(Reference Type). 目录 基本数据类型 数值类型 整数类型 byte short int lon ...
随机推荐
- LINUX开启SAMBA服务
samba,用于网络文件共享,类似于nfs, samba多用于win和linux之间 linux之间多用nfs c/s架构 smb协议 samba主要是两个服务,核心启动服务SMB,监听139TCP端 ...
- 【转载】UNICODE与ASCII的区别
原文地址:https://blog.csdn.net/lx697/article/details/5914417 最近的项目涉及到了国际化的问题,由于之前并没有接触到UNICODE编码,因此,在项目期 ...
- Tomcat服务器编码格式设置
/** *1.找到.xml server文件 */ /** * 2. 设置encoding */
- javascript打开窗口
项目中javascript代码,早期使用了只有ie支持的方法:Window createPopup() 方法 那个时候是2009年,而现在已经是2019-12-11了.如何改造这个早期的代码呢? 找到 ...
- linux之shell脚本学习(一)
#!/bin/bash echo 'hello' your_name='longxiong' echo $your_name echo ${your_name} for i in `ls /opt`; ...
- cordova 一个将web应用程序封装成app的框架
cordova的详细介绍请参考这个链接:http://www.zhoujingen.cn/blog/7034.html 我接下来主要将如何搭建. 1.首先你需要下载几样东西 1.jdk. 2.andr ...
- Elasticsearch 报错:Fielddata is disabled on text fields by default. Set `fielddata=true` on [`your_field_name`] in order to load fielddata in memory by uninverting the inverted index.
Elasticsearch 报错: Fielddata is disabled on text fields by default. Set `fielddata=true` on [`your_fi ...
- Kubernetes Pod的数据卷Volume
概述 由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些问题.首先,当容器崩溃时,kubelet将重新启动容器,但是写入容器的文件将会丢失,容器将会以镜像的初始状态重新开始:第二,在 ...
- selenium 滚动条的滚动
如果是一个页面自带的滚动条(即网页的的滚动条) 可直接用js js="window.scrollTo(x,y);" x(横向),y(纵向)代表的就是位置 ,具体移动到哪里 ...
- 生成随机文件名JS
export default function (length) { const data = ["0", "1", "2", " ...