Java运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。

我们把运算符具体分为:算数运算符,比较运算符,逻辑运算符,位运算符,赋值运算符,条件运算符,instanceof 运算符。

1. 算数运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。

操作符

名称

描述

+

加法

相加运算符两侧的值

减法

左操作数减去右操作数

*

乘法

相乘操作符两侧的值

/

除法

左操作数除以右操作数

%

取余

左操作数除以右操作数的余数

++

自增

操作数的值增加1

自减

操作数的值减少1

以下代码:

public static void main(String[] args) {

int a = 5;

int b = 10;

System.out.println("“+” 运算:"+(a+b));

System.out.println("“-” 运算:"+(a-b));

System.out.println("“*” 运算:"+(a*b));

System.out.println("“/” 运算:"+(a/b));

System.out.println("“%” 运算:"+(a%b));

System.out.println("“++” 运算:"+(a++));

System.out.println("“--” 运算:"+(a--));

}

输出结果:

“+” 运算:15

“-” 运算:-5

“*” 运算:50

“/” 运算:0

“%” 运算:5

“++” 运算:5

“–” 运算:6

另外,进行除法运算时,若两个操作数是整型的,结果也会是整型的,舍弃掉小数部分;如果有一个数是浮点数,结果将自动转型为浮点型。进行取余运算时,若两个操作数是整型的,结果也会是整型的,如果有一个数是浮点数,结果将自动转型为浮点型

**其中,自加和自减运算符针对一个数值本身的运算;且前缀自增自减(++a,–a)是先进行自增或者自减运算,再进行表达式运算。后缀自增自减(a++,a–)是先进行表达式运算,再进行自增或者自减运算。我们给出例子:

public static void main(String[] args) {

int a = 5;

int b1 = 10;

int b2 = 10;

int c1 = 10;

int c2 = 10;

System.out.println("前缀自增b1参与表达式计算后值为:"+(a*++b1));

System.out.println("后缀自增b2参与表达式计算后值为:"+(a*b2++));

System.out.println("前缀自减b1参与表达式计算后值为:"+(a*--c1));

System.out.println("后缀自减b2参与表达式计算后值为:"+(a*c2--));

}

2. 比较运算符

比较运算符的结果一定是boolean类型,也叫关系运算符

操作符

名称

描述

>

大于

相加运算符两侧的值

<

小于

左操作数减去右操作数

==

等于

相乘操作符两侧的值

>=

大于等于

左操作数除以右操作数

<=

小于等于

左操作数除以右操作数的余数

!=

不等于

操作数的值增加1

如,

public static void main(String[] args) {

int a = 5;

int b = 10;

System.out.println(a > b );

System.out.println(a < b );

System.out.println(a == b );

System.out.println(a >= b );****

System.out.println(a <= b);

System.out.println(a != b );

}

输出结果:

false

true

false

false

true

true

注意,比较运算符“==”用来比较基本数据类型是比较的是值是否相等,比较引用数据类型是比较的是引用是否相等,引用数据类型用equals()来比较字面量是否相等。

3. 逻辑运算符

操作符

名称

描述

&&

短路与

当且仅当两个操作数都为真,条件才为真。

&

逻辑与

当且仅当两个操作数都为真,条件才为真。

| |

短路或

如果任何两个操作数任何一个为真,条件为真。

|

逻辑或

如果任何两个操作数任何一个为真,条件为真。

!

逻辑非

用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false

逻辑运算符中,“与”运算符和“或”运算符都有两个,“&&”我们称之为短路与。“||”我们称之为短路或,短语与“&&”从左到右一次判断,遇到false则停止判断,得出结果未false;逻辑与“&”从左到右一次判断,直至结束。短语或“||”从左到右一次判断,遇到true则停止判断,得出结果未true;逻辑或“|”从左到右一次判断,直至结束。我们给出例子:

public static void main(String[] args) {

int a = 5;

int b = 10;

//短路与,前一个表达式的值为false,不在判断下一个表达式,故a++不执行

System.out.print((a>b)&&(a++ == 1));

System.out.println(" a的值:"+ a);

//逻辑与,前一个表达式的值为false,仍依次判断下一个表达式

System.out.print((a>b)& (a++ == 1));

System.out.println(" a的值:"+ a );

//短路或,前一个表达式的值为true,不在判断下一个表达式,故a++不执行

System.out.print((a

System.out.println(" b的值:"+ b );

//逻辑或,前一个表达式的值为true,仍依次判断下一个表达式

System.out.print((a

System.out.println(" b的值:"+ b );

//非运算符

System.out.print(!(a

}

4. 位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。

操作符

名称

描述

&

按位&

如果相对应位都是1,则结果为1,否则为0

|

按位或

如果相对应位都是0,则结果为0,否则为1。

^

异或

如果相对应位值相同,则结果为0,否则为1

~

按位取反

翻转操作数的每一位,即0变成1,1变成0。结果为: -(X+1)

<<

按位左移 |通常格式为:value << num,value按位左移num位

>>

有符号按位右移

通常格式为:value >> num,value按位右移num位。

>>>

无符号按位右移

通常格式为:value >> num,value按右移num位,移动得到的空位以零填充。

我们给出例子:

public static void main(String[] args) {

int a= 10;

int b = 20;

//a转化成二进制表示为:1010;b转化为二进制表示为:10100

//按位运算时,我们把a表示为:01010

System.out.println(a&b);

//按位与运算,有零则为零,都为1则表示为1,与的结果为:00000,即十进制的0

System.out.println(a|b);

//按位或运算,有1则为1,都为0则表示为0,或的结果为:11110,即十进制的30

System.out.println(a^b);

//按位或运算,对应位置相同则为0,否则为1,取反的结果为:11110,即十进制30

}

运行结果:

0

30

30

下面,我们来说一下按位取反,计算机内部都是以补码的形式在做数学运的,而我们所用的编码规则,例如原码、反码则是我们自定义的,用来方便和计算机中的补码来形成转化。故而,我们在进行按位取反是要把原码或者反码转化成补码的形式。正数的反码和补码与原码相等; 负数的反码是符号位不变,其余按位取反,补码为反码+1。负数的最高符号位为1。

如,

public static void main(String[] args) {

int a= 10;

int b= -10;

System.out.println(~a);

System.out.println(~b);

}

运行结果为:-11,9。 分析如下: a为正数,其补码形式与原码相同,表示为:00001010,按位取反后为11110101,注意,此时为补码形式,转化为反码表示为,11110100,再转化为原码表示为:10001011,即十进制的-11.同样的,b为负数,其补码表示为:11110110,按位取反后为00001001,此时依然为补码形式,转化为原码即其本身00001001,即十进制的9。故,按位取反后的结果可表示为-(X+1)

接下来,我们给出例子来看一下位移运算符

public static void main(String[] args) {

int a= 10;

int b = -10;

//int为4个字节,也就是32位,为了简化a表示为:00001010,

// b为负数我们表示为:1000 0000 0000 0000 0000 0000 0000 1010

//b的补码形式为 1111 1111 1111 1111 1111 1111 1111 0110

System.out.println( a<<1 );

//按位左移,原则舍弃高位,低位补零表示为:00010100,即20

System.out.println(a>>1);

//按位右移,原则舍弃低位,高位补零表示为:00000101,即5

System.out.println(a>>1);

//按位右移,原则舍弃低位,高位补零表示为:10000101,即5

System.out.println(a>>>1);

//按位右移,原则舍弃低位,高位补零表示为:0000010,即5

System.out.println(b>>1);

//有符号按位右移,原则舍弃低位,符号位不变,其余高位补零原码表示为:

// 1000 0000 0000 0000 0000 0000 0000 0101,即-5

System.out.println(b>>>1);

//无符号按位右移,原则舍弃低位,高位补零(补码=原码)表示为:

// 0111 1111 1111 1111 1111 1111 1111 011,即十进制的,2147483643

}

输出结果:

20

5

5

5

-5

2147483643

总结一下,原则上,按位左移时,原则舍弃高位,低位补零;有符号按位右移,原则舍弃低位,符号位不变,其余高位补零;无符号按位右移,原则舍弃低位,高位补零。再次强调,做位移运算时,是按补码来进行运算的

5. 赋值运算符

操作符

名称

描述

=

赋值

右操作数的值赋给左侧操作数

+=

加和赋值

左操作数和右操作数相加赋值给左操作数 (a+=b 等同于 a = a+b)

-=

减和赋值

左操作数和右操作数相减赋值给左操作数 (a-=b 等同于 a = a-b)

*=

乘和赋值

左操作数和右操作数相乘赋值给左操作数 (a*=b 等同于 a = a*b)

\/=

除和赋值

左操作数和右操作数相除赋值给左操作数 (a/=b 等同于 a = a/b)

(%)=

取模和赋值

左操作数和右操作数取模后赋值给左操作数 (a%=b 等同于 a = a%b)

<< =

左移位赋值

左移位赋值运算符 (a<<=b 等同于 a = a<

>> =

右移和赋值

右移位赋值运算符 (a>>=b 等同于 a = a>>b)

^ =

除和赋值

按位与赋值运算符 (a^=b 等同于 a = a^b)

&=

除和赋值

按位异或赋值操作符 (a&=b 等同于 a = a&b)

| =

除和赋值

按位或赋值操作符 (a|=b 等同于a = a|b)

基本的赋值运算符是“=”。他的优先级别低于其他的运算符,所以对该运算符往往最后读取,他不是“等于”,它的作用是将一个表达式的值赋给一个左值。所谓左值是指一个能用于赋值运算左边的表达式。左值必须能够被修改,不能是常量,以上其他是复合的赋值运算符,又称为带有运算的赋值运算符,也叫赋值缩写。等同与先按运算符运算后再把运算结果付给左值(见表格)。具体运算方法上边儿已经罗列,此处不再赘述

6. 条件运算符

条件运算符也叫三目运算符

语法:

(条件) ? 结果一 : 结果二;

当条件成立,执行结果一,否则执行结果二。,“?”前的值必须是true或flase

我们给出例子:

if(a

min=a;

else

min=b;

可以用下面的三目运算符来处理

min = a

7. instanceof 运算符

instanceof运算符可以确定对象是否属于一个特定的类.该运算符是二目运算符,左边的操作元是一个对象,右边是一个类,当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是true,否则是false。,使用格式:( Object reference variable ) instanceof (class/interface type)

我们给出例子:

public static void main(String[] args) {

String a = "name";

System.out.println(a instanceof String);

System.out.println(a instanceof Object);

}

输出结果:true,true

8. 运算符优先级

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。相同优先级中,按结合顺序计算。

通常优先级由高到底的顺序依次是:

1. 括号级别最高,逗号级别最低;

2. 单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。

3. 除了单目运算符、赋值运算符和条件运算符,其他的运算符都是从左到右结合的。

大家可参考网络上总结较好的优先级口诀用来辅助记忆和使用,但要记住所有的优先级顺序还是有点儿困难的,实际开发中,建议大家使用小括号辅助进行优先级管理,也可以使计算过程更加清晰,提高可读性

热度:

1,222

java自定义运算符_Java运算符相关推荐

  1. java 运算符_java 运算符

    运算符是一些特殊的符号,主要用于数学函数,一些类型的赋值语句或逻辑比较方面.Java 中的运算符分为以下几类. 一.算数运算符 算数运算符包括: + 加法运算,字符串连接运算 - 减法运算 * 乘法运 ...

  2. java 逗号运算符_Java 运算符

    Java 运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 ...

  3. java 布尔逻辑运算符_Java运算符

    Java语言提供许多操作符.操作符是特殊的符号(symbol),它对一个或者两个.三个的操作数进行运算,然后返回一个结果,最简单的就像我们一年级学到的+ -号.一般地,可以将运算符分为四大类:算数运算 ...

  4. java块语句_Java运算符、表达式、语句块

    一.运算符 在java中用于程序计算的操作i发统称为运算符,运算符分为如下几类: 1.算术运算符 算术运算符 说明 + 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 a+b - 两个数相 ...

  5. java哪几种运算符_java运算符有哪些

    java运算符有:1.算术运算符,如"+.-.%等":2.赋值运算符,如"=":3.比较运算符,如"大于.等于.不等于":4.逻辑运算符,如 ...

  6. java 位或运算符_Java 运算符(位运算符)

    在我们平常查看的源码中能够经常的看到使用位运算符,这些位运算符一般只用于整数类型和字符类型的运算,Java 提供的常用位运算符有: 操作符 描述 & 按位与 \ 按位或 ~ 按位非 ^ 按位异 ...

  7. java 逻辑运算符优先级_Java运算符及运算符的优先级

    介绍 Java语言中提供了很多运算符来操作变量,现总结以下七种: 赋值运算符 算术运算符 关系运算符 逻辑运算符 位运算符 三目运算符 instanceof运算符 一.赋值运算符 赋值符号 " ...

  8. 箭头 运算符_Java 运算符

    运算符 基础运算符比较常规 + - * / 代表加减乘除,以及整数的求余用 % 来表示 需要注意的是整数被 0 除将会产生一个异常, 浮点数被 0 除会得到无穷大 或 NaN 数学函数与常量 Math ...

  9. java自定义序列化_Java中的自定义国际化(i18n)

    java自定义序列化 国际化(i18n)在我们的软件项目中非常重要. 它主要带来以下好处: 将UI字符串外部化为代码文件以外的外部文件,以及易于管理的UI内容. 支持多种语言. 在这篇文章中,将为Ec ...

最新文章

  1. Androidstudio查不出具体哪行报错解决办法
  2. oracle内置函数 wmsys.wm_concat使用
  3. python中整型_实例介绍Python中整型
  4. PTA: 7-2 银行业务队列简单模拟 (25 分)
  5. UE4 命令行创建Pak
  6. 征途2助手网关服务器,【征途2】官方网站-《征途2》夏日激情来袭,清凉一夏版本送限定套装...
  7. 测度论与概率论基础(程士宏)学习笔记(三)
  8. 教你如何设置电脑保护色来保护眼睛
  9. python透视表画图_透视表、交叉表、matplotlib作图
  10. 关于计算机如何实现减法操作
  11. 1.5极限存在准则和重要极限
  12. 菜鸟解决方案--绑定域名后GAppProxy出现404错
  13. 基于 MATLAB 、Simulink 仿真和 TrueTime 工具箱的网络控制系统的仿真方法 附完整代码
  14. JavaScript实战之简单的抽签器
  15. jquery的$是什么意思与相关的
  16. 一段从API读取基金净值信息并写入Excel表的Python代码
  17. 用Python实现将一张图片分成9宫格
  18. 易语言多线程API模块综合应用
  19. citespace使用方法,经验(汇总陈超美博士以及各位学术研究者的文章,侵删致谢,只用于学习方便)
  20. Kubernetes作为云原生应用的基石数据加密算法

热门文章

  1. Docker换源与镜像拉取
  2. ChatGPT这么火,如果ChatGPT滥用或者重度依赖,会怎么样?
  3. java自启动windows程序,监测服务及重启
  4. linux 14.04 lts eclipse c++,Ubuntu 14.04下安装eclipse搭建C++开发环境
  5. 正泰双十一“9连冠”,3LD开关新品喜提天猫插座类目销售TOP1!
  6. js汉字转换首字母大写拼音
  7. 设置idea汉化中文
  8. 服务器监控管理系统效益,物流车辆gps监控管理系统分析.pdf
  9. 小程序实现点击复制内容功能
  10. 用ABBYY把PDF如何转换成HTML的方法