Java自增和自减操作符——++/--的那些事

1. 概述

自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作。

2.分类说明

++和--是对变量进行自增1和自减1的简写操作符。许多编程任务中经常需要对变量加1或者减1,所以采用这两个操作符会方便许多。例如,下面的代码是对i自增1,而对j自减1:

int i = 3, j = 3;
i++; // i become 4
j--; // j become 2

i++读为i加加,i--读为i减减。这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。这些操作符也可以放在变量前面,比如:

int i = 3, j = 3;
++i; // i becomes 4
--j; // j becomes 2

--i将i增加1,--j将j减去1。这些操作符称为前置自增操作符和前置自减操作符。

如你所见,前面的例子中,i++和++i的效果,或者i--和--i的效果是一样的。然而,当用在表达式中不单纯只进行自增和自减时,他们就会产生不同的效果。具体如下表,描述了自增和自减操作符的不同之处,并且给出了示例:


操作符


名称


描述


示例(假设i=1


++var


前置自增


将var加1,在语句中使用新的var值


Int j = ++i; // j is 2, i is 2


var++


后置自增


将var加1,但是在语句中使用原来的var值


Int j = i++; // j is 1, i is 2


--var


前置自减


将var减1,在语句中使用新的var值


Int j = --i; // j is 0, i is 0


var--


后置自减


将var减1,但是在语句中使用原来的var值


Int j = i--; // j is 1, i is 0

下面演示前置形式的++(或者--)和后置形式的++(或者--)的补充示例。考虑以下代码:

int i = 10;
int newNum = 10 * i++;    //左边等价于---》 int newNum = 10 * i;
System.out.print("i is " + i    //接上条   i = i + 1;
   + ", newNum is " + newNum);

执行输出:

i is 11, newNum is 100

上述中i自增1,然后返回i原来的值来参与乘法运算。这样,newNum的值就为100。如果如下所示将i++换为++i:

int i = 10;
int newNum = 10 * (++i);    //左边等价于---》  i = i + 1;
System.out.print("i is " + i    //接上条  int newNum = 10 * i;
   + ", newNum is " + newNum);

执行输出:

i is 11, newNum is 110

上述中 i自增1,然后返回i的新值,并参与乘法运算。这样,newNum的值就为110。

下面是另一个例子:

double x = 1.0;
double y = 5.0;
double z = x-- + (++y);

在这三行程序执行完之后,y的值为6.0,z的值为7.0,而x的值为0.0。

Java中从左到右对操作数求值。在右边操作数的任何部分被求值之前,二元操作符左边的操作数先求值。这一规则的优先级高于表达式的任何其他规则。下面是一个例子:

int i = 1;
int k = ++i + i * 3;
// 分析可知: ++i求值后返回2。当求i*3的值时,i是2。因此k的值是8。

//------------对比以下代码------------------
int i = 1;
int k = i*3 + ++i ;
// 分析可知:从左往右,当求i*3的值时,i是1,后算++i,++i整体是2。因此k的值是5。

3.总结

自增在平时的Java笔试和面试中经常作为考查程序员的基础题多次出现,也是比较容易混淆的知识点。在平时编程中使用自增操作符和自减操作符可以使表达式更加简短,但也会使他们比较复杂且难以读懂。应该避免在同一个表达式中使用这些操作符修改多个变量或多次修改同一个变量,如int k = ++i + i * 3。

4.说明

本文摘自《Java语言程序设计与数据结构》(基础篇)第11版第2章2.14节内容,并由本人结合实例并补充扩展了一些实例代码,本文用于本人学习及经验总结。如需转载(非商业用途)请注明原作者(梁勇)及本文说明中涉及事项。

原文地址:https://www.cnblogs.com/yif0118/p/10425013.html

时间: 2024-08-26 04:05:47

Java自增和自减操作符——++/--的那些事的相关文章

java 自增和自减运算符

/** 自增和自减运算符: ++: 如果是++b,则表示先对变量b+1,再执行其他的操作: 如果是b++,则表示先执行表达式操作,再对变量自身+1 --: 用法和++相同 */ //Test.java public class Test16{ public static void main(String args[]){ int age=28; int a=10; int b=++a; System.out.println("b:"+b); System.out.println(&qu

Java 自增、自减

i++/i-- 先使用变量的值,然后改变变量的值: ++i/--i 先该表变量的值,然后使用变量的值: 学习Java的时候没有思考过java中变量自增的原理,今天遇到一道java题目,有点懵:int i = 0: i = i++; 最终变量i的值到底是变成1呢还是保持为0呢? java中变量自增.自减的实现其实使用了一个临时中间变量作为缓存. 以i++为例: 1 public static void main(String[] args) { 2 int i = 0; 3 int j = i++

恶补C++ 之 自增、自减操作符前缀式与后缀式的区别

相信很多人刚开始学习编程的时候,也是为这个问题烦恼过吧,前缀式与后缀式,在很久之前,式没有办法区别++和--操作符的前缀和后缀的调用的.不过在C++已经得到了扩展. 然而无论式前缀或者后缀,都只有一个参数.为了解决这个问题,C++规定后缀形式有一个int类型的参数,当函数被调用的时候,编译器传递一个0作为int参数给该函数: class UPInt { public: UPInt& operator++();        // ++前缀 const UPInt operator++(int);

C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符

重载操作符与转换 --自增/自减操作符 引言: 自增,自减操作符常常由诸如迭代器这种类实现,这种类提供相似于指针的行为来訪问序列中的元素.比如,能够定义一个类,该类指向一个数组并为该数组中的元素提供訪问检查: class CheckedPtr { public: //这个类没有默认构造函数,必须提供指向数组的指针. /**构造函数的參数是两个指针:一个指向数组的開始,还有一个指向数组的末端. *构造函数用这两个指针初始化 beg 和 end *并将 curr 初始化为指向第一个元素 */ Che

C++ 的自增操作符和自减操作符

在C++ 中自增和自减操作符为对象加1或者减1提供了很多的方便,但是他们有前置和后置两种形式,以及与其它操作混合使用容易出现错误,所以在次写下自己的理解. 前置自增操作符,该操作使其操作数加1,操作的返回结果是修改后的数, 前置自减操作符,该操作使其操作数减1,操作的返回结果是修改后的数, int i = 0,j = 0; j = ++i; cout<<"i="<<i<<endl;//1 cout<<"j="<&

14.7. 自增操作符和自减操作符

#include<iostream> #include<string> using namespace std; /* 14.7. 自增操作符和自减操作符 */ //可以定义一个类,该类指向一个数组并为该数组中的元素提供访问检查 /* 构造函数的参数是两个指针:一个指向数组的开始,另一个指向数组的末端. 构造函数用这两个指针初始化 beg 和 end,并将 curr 初始化为指向第一个元 素. */ class checkedptr { public: checkedptr(int

Java基础知识(一) 自增、自减运算符

.d1 { border-style: none } .d2 { border-style: solid } .d3 { border-style: dotted } .d4 { border-style: dashed } .d5 { border-style: double } .d6 { border-style: groove } .d7 { border-style: ridge } .d8 { border-style: inset } .d9 { border-style: out

Java之路(二) 操作符

操作符比较简单,这里只点一下注意事项和要点,请牢记. 操作符接受一个或多个参数,并生成一个新值. Java中,几乎所有的操作符都只能操作基本类型. 例外是 = == 和 !=,它们可以操作所有的对象.此外,String类支持+和+=. 1.赋值 = 基本类型存储了实际的数值,所以为基本类型变量赋值是将一个地方的内容赋值到变量所表示的地址. 为对象赋值时,实际操作的是引用.我们如下图所示,假设T1和T2是同一个类的两个对象的引用,分别指向各自的对象.开始如A所示,当执行赋值T1=T2后,如B所示,

Thinking In Java笔记(第三章 操作符)

第三章 操作符 3.2使用Java操作符 操作符接受一个或者多个参数,并生成一个新值.参数的形式和普通方法调用不同,但是效果是相同的.普通的加减乘除和正负号都是和其他编程语言类似. 有些操作符可能会产生"副作用",改变操作数的值,这些擦佐夫最普通的用途就是用来产生副作用的.使用此类操作符产生的值和没有副作用的操作符产生的值没区别. 几乎左右的操作符都只能操作"基本类型",例外的是"=","==","!=",