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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ITXDL123/article/details/94378303

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运行结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玩转JavaEE

Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如...

13020
来自专栏纯洁的微笑

设计一个百万级的消息推送系统

先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互。

11630
来自专栏纯洁的微笑

Java 11正式发布,新特性解读

北京时间 9 月 26 日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注。你可以点击以下...

11030
来自专栏复盘总结文章集合

深入理解Java8 Lambda表达式

匿名函数的应用场景是: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用Lambda表达式。lambda表达式所表示的匿名函数的内容应该是很简单...

8930
来自专栏码匠的流水账

聊聊nacos的ServerStatusManager

nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerStatusMa...

8120
来自专栏Java程序员那些事

Java中的IO流知识总结

1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter

10810
来自专栏Java程序员那些事

Java并发编程:深入剖析ThreadLocal

想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解...

8220
来自专栏IT那个小笔记

Hibernate配置

Hibernate核心配置文件传递的是连接数据库的必备信息,还有一些可选配置,所以在一个使用Hibernate的工程中需要去完成一个这样的配置文件

21510
来自专栏weixuqin 的专栏

ArrayList 源码分析

在 Java 中当创建数组时会在内存中划分一块连续的内存,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中...

7110
来自专栏孙小白

Java课堂笔记1

3. 命名规则严格要求,字母、数字、下划线、美元符号$、下划线_组成,其中不能以数字开头,也不能使用Java的关键字

8430

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励