Java提供了丰富的运算符环境。可以将大部分Java运算符划分为4组:算术运算符、位运算符、关系运算符以及逻辑运算符。Java还定义了一些用于处理某些特定情况的附加运算符。本章将介绍除类型比较运算符instanceof和新的箭头运算符->之外的所有Java运算符。

算符运算符

算术运算符用于数学表达式,使用方式与在代数中的使用方法相同。表1中列出了算术运算符。

表1  算术运算符

算术运算符的操作数必须是数值类型。不能为boolean类型使用算术运算符,但是可以为char类型使用算术运算符,因为在Java中,char类型在本质上是int的子集。

1.1  基本算术运算符

基本算术运算符包括加、减、乘和除,对于所有数值类型来说,行为可能和您期望的一样。一元减号运算符对其唯一的操作数进行求反,一元加号运算符简单的返回其操作数的值。请记住,当将触发运算符用于整数数据类型时,结果不会包含小数部分(丢失精度)。

下面的程序演示了算术运算符,该程序还演示了浮点数除法和整数除法之间的区别。

public class BasicMath{

public static void main(String[] args){

System.out.println("整数运算");

int a = 1 + 1;

int b = a * 3;

int c = b / 4;

int d = c - a;

int e = -d;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

System.out.println("d = " + d);

System.out.println("e = " + e);

System.out.println("浮点运算");

double da = 1 + 1;

double db = da * 3;

double dc = db / 4;

double dd = dc - da;

double de = -dd;

System.out.println("da = " + da);

System.out.println("db = " + db);

System.out.println("dc = " + dc);

System.out.println("dd = " + dd);

System.out.println("de = " + de);

}

}

编译并运行这个程序,控制台将显示如图1所示的信息。

图1  BasicMath运行结果

1.2  求模运算符

求模运算符%可以返回除法操作的余数,既可以用于浮点数,也可以用于整数。下面的程序演示了%运算符的用法。

public class Modulus{

public static void main(String[] args){

int x = 42;

double y = 42.25;

System.out.println("X对10求模: " + x % 10);

System.out.println("Y对10求模: " + y % 10);

}

}

编译并运行这个程序,控制台将显示如图2所示的信息。

图2  Modulus运行结果

1.3  算术与赋值符合运算符

Java提供了可用于将算术运算和赋值运算组合到一起的特殊运算符。您可能知道,类似下面的语句在编程中非常普遍:

a = a + 4;

在Java中,可以重写这行语句,如下所示:

a += 4;

该版本中使用+=复合赋值运算符。这两条语句执行相同的动作:都将a的值增加4。下面是另外一个例子:

a = a % 4;

这行代码可以重写成:

a %= 4;

对于这种情况,%=得到a/4的余数,并将结果存回变量a中。

对于所有的二元运算符,都有相应的复合赋值运算符。因此,以下形式的所有语句:

var = var op expression;

都可以改写成下面的形式:

var op= expression;

复合赋值运算符具有两个优点。首先,便于输入,因为它们是与长格式等价的“简化版”。其次,有时候它们比等价的长格式版本的效率更高。所以,在专业的Java程序中,会经常看到复合赋值运算符。

下面的程序演示了几个复合赋值操作。

public class OpEquals{

public static void main(String[] args){

int a = 1;

int b = 2;

int c = 3;

a += 5;

b *= 4;

c += a * b;

c %= 6;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

}

}

编译并运行这个程序,控制台将显示如图3所示的信息。

图3  OpEquals运行结果

1.4  自增与自减运算符

++和--是Java的自增和自减运算符。在后面会看到,它们有一些特殊的属性,是的它们非常有趣。首先让我们准确地考察自增和自减运算符的行为。

自增运算符将操作数加1,自减运算符将操作数减1.例如,下面这条语句:

x = x + 1;

可以使用自增运算符改写为如下形式:

x++;

类似地,下面这条语句:

x = x – 1;

与下面的语句是等价的:

x--;

这些运算符比较独特,它们既可以显示为后缀形式,紧随在操作数后面;也可以显示为前缀形式,位于操作数之前。在前面的例子中,采用哪种形式是区别的。但是,当自增或自减运算符是表达式的一部分时,两者之间会出现微妙的、同时也是有价值的差别。对于前缀形式,操作数将先自增或自减,然后表达式使用自增或自减之后的值;对于后缀形式,表达式先使用操作数原来的值,然后在进行自增或自减运算。例如:

x = 42;

y = ++x;

在此,正如所期望的,y被设置为43,因为在将x赋值给y之前就发生了自增操作。因此,“y = ++x;”这行代码等价于下面这两条语句:

x = x + 1;

y = x;

但是,如果将上面的代码写为如下形式:

x = 42;

y = x++;

那么,会在执行自增运算之前,先将x的值赋值给y,所以y的值为42,当然,对于这两种情况,x的值都被设置为43.在此,“y = x++;”这行代码等价于下面这两条语句:

y = x;

x = x + 1;

下面的程序演示了自增运算符的用法。

public class IncDec{

public static void main(String[] args){

int a = 1;

int b = 2;

int c;

int d;

c = ++b;

d = a++;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

System.out.println("d = " + d);

}

}

编译并运行这个程序,控制台将显示如图4所示的信息。

图4  IncDec运行结果

IT兄弟连 Java语法教程 算符运算符的更多相关文章

  1. IT兄弟连 Java语法教程 关系运算符

    关系运算符用来判定一个操作数与另外一个操作数之间的关系.特别是,它们可以判定相等和排序关系.表7中列出了关系运算符. 表7  关系运算符 关系运算符的结果为布尔值.关系运算符最常用与if语句和各种循环 ...

  2. IT兄弟连 Java语法教程 位运算符

    Java定义了几个位运算符,它们都可以用于整数类型(long.int.short.byte以及char).这些运算符对操作数的单个位进行操作.表1 对位运算符进行了总结. 表1  位运算符 由于位运算 ...

  3. IT兄弟连 Java语法教程 标识符和关键字

    Java语言也和其它编程语言一样,使用标识符作为变量.对象的名字.也提供了一系列的关键字用以实现特别的功能.本小节将详细介绍Java语言的标识符和关键字等内容. 1.分隔符 Java语言里的分号“;” ...

  4. IT兄弟连 Java语法教程 数组 经典案例

    案例需求: 编程实现双色球中奖号码的生成 1)应用知识: ●  数组的声明 ●  数组的使用 ●  for循环 2)需求解析: 在该程序中,需要定义一个长度为7的数组,用来存储中奖号码,使用Rando ...

  5. IT兄弟连 Java语法教程 Java的发展历程

    只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...

  6. IT兄弟连 Java语法教程 数据类型2

    整型 Java定义了4种整数类型:byte.short.int和long.所有这些类型都是有符号的.正或负的整数.Java不支持无符号的.只是正值的整数.许多其它计算机语言同时支持有符号和无符号整数. ...

  7. IT兄弟连 Java语法教程 变量2

    变量的作用域和生命周期 到目前为止,使用的所有变量都是在main()方法开始时声明的,然而,Java允许在任何代码块(代码块以开花括号开始,以闭花括号结束)中声明变量,代码块定义了作用域.因此,每当开 ...

  8. IT兄弟连 Java语法教程 变量1

    什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...

  9. IT兄弟连 Java语法教程 Java语言的其他特性

    Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ●  语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...

随机推荐

  1. Linux中crontab定时任务

    crontab安装(centOS) yum -y install vixie-cron crontab语法(计划任务) crontab [-u user] file crontab [-u user] ...

  2. 史上最全Oracle数据泵常用命令

    本文转自https://blog.csdn.net/Enmotech/article/details/102848825 墨墨导读:expdp和impdp是oracle数据库之间移动数据的工具,本文简 ...

  3. BZOJ3144/LG3227 「HNOI2013」切糕 最小割离散变量模型

    问题描述 BZOJ3144 LG3227 还想粘下样例 输入: 2 2 2 1 6 1 6 1 2 6 2 6 输出: 6 题解 关于离散变量模型,我不想再抄一遍,所以: 对于样例,可以建立出这样的图 ...

  4. [专题总结]初探插头dp

    彻彻底底写到自闭的一个专题. 就是大型分类讨论,压行+宏定义很有优势. 常用滚动数组+哈希表+位运算.当然还有轮廓线. Formula 1: 经过所有格子的哈密顿回路数. 每个非障碍点必须有且仅有2个 ...

  5. 高阶组件&&高阶函数(一)

    antd里面的form表单方面,遇到一个高阶函数,以及高阶组件,于是看了一下这方面内容,前辈们的文章写得也非常详细,这里就稍微kobe一下 高阶函数与高阶组件 高阶函数: 高阶函数,是一种特别的函数, ...

  6. 【docker构建】基于docker搭建redis数据库缓存服务

    搭建redis服务 首先拉取镜像==>运行镜像为容器 # 先搜索下redis镜像 [root@VM_0_10_centos wordpress]# docker search redis # 拉 ...

  7. 解决python安装第三方库超时问题

    这里说明一下,配置文件中的url还可以换成下面的URL 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.u ...

  8. CentOS7升级OpenSSL版本

    1.CentOS7.6默认安装的openssl版本为 # 查看openssl版本 openssl version 2.下载最新的openssl wget https://www.openssl.org ...

  9. ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

    上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...

  10. Web前端基础(14):jQuery基础(一)

    1. jQuery概述 1.1 为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...