java的自增自减_Java中自增和自减操作符(++/--)的那些事

自增(++)和自减(--)运算符

在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节内容,并由本人结合实例并补充扩展了一些实例代码,本文用于本人学习及经验总结。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Finished yeah!

终于到了最后的博客阶段,这时候才知道博客此时此刻是多么的惬意,它成了书写心声的自由平台!耗时一天完成这作业说起来也是蛮辛苦的,编译器需要新装,IDE需要熟悉,当然最主要的是之前浅入浅出的C功底在此次作…

《Python语言程序设计》——1.6 开始学习Python

本节书摘来自华章计算机《Python语言程序设计》一书中的第1章,第1.6节,作者:[美]梁勇(Y. Daniel Liang) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.6 开始学习Python 关键点:…

Tomcat性能调优

1、集成apache 虽然Tomcat也可以作web服务器,但是处理静态html的速度比不上apache,且其作为web服务器的功能远不如Apache,因此把apache和tomcat集成起来,讲html和jsp功能部分进行明确的分工,让tomcat只处理jsp部分&…

【转】sip中的subscribe和notify扩展应用技术

http://blog.csdn.net/hwz119/article/details/3965322转载于:https://www.cnblogs.com/matthew-2013/p/4917207.html

再读《被神化的框架》

开发框架,构件,组件非常地多,而且,趋势是越来越多,特别是在java中。当然也不是说其它平台的少。而特别是框架越来越被神化了,似乎用之解决一切问题,不用就要敲坏键盘。对于老衲这样的打字员来说…

河南推出近万亿PPP投资计划 郑州实现智慧城市全覆盖

1 近万亿PPP项目启动 眼下,国内财经新闻的热点聚焦在PPP开发上,这与PPP支撑国内经济平衡运行的一支强劲力量正被政府看好。就连二级市场也出现了PPP概念的抢筹现象。 9月27日,股市再一次遭遇抛售,大盘创出阶段性新低,然…

java基础实例代码_Java基础实例

打印等腰三角形代码public class ForForTest{public static void main(String []args){for(int x0;x<5;x){for(int yx1;y<5;y){System.out.print(" ");}for(int z0;zSystem.out.print("* ");}System.out.println();}}}折半查找代码&#xff1a;//练习…

###《Effective STL》--Chapter3

点击查看Evernote原文。 #author: gr #date: 2014-09-13 #email: forgeruigmail.com Chapter3 关联容器 Topic 22: 切勿直接修改set或multiset中的键 修改元素的值可以通过下面五步操作&#xff0c;避免作类型转换。 struct IDNumberLess : public binary…

如何获取网络资源?

# encodingutf-8 #python 2.7.10 #xiaodeng #如何获取网络资源&#xff1f; #HTTP权威指南 26页#url就是因特网资源的标准化名称&#xff0c;他指向每一条电子信息&#xff0c;告诉你他们位于何处&#xff0c;以及如何与之交互。 #URL是浏览器寻找信息时所需的资源位置。 #一个…

Loadrunner多服务器连接问题

今天用想增加一个压力机,在服务器管理列表里怎么也连不上,后来解决方法如下:1. 关闭所有loadrunner组件,并手动结束lr_开头的进程2.找到惠普loadrunner安装目录(C:\Program Files\HP\LoadRunner\bin),手动运行magentproc.exe即可最新内容请见作者的GitHub页&#xff1a;http://…

java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储

&#xff11;.寄存器这是最快的存储区&#xff0c;因为它位于处理器内部&#xff0c;数量极其有限&#xff0c;所以寄存器根据需求进行分配&#xff0c;你不能直接控制&#xff0c;也不能在程序中感 觉到寄存器存在的任何迹象。2.堆栈位于通用RAM(随机访问存储器)中&#xff0…

物联网安防技术融合在细分领域的应用分析

物联网的核心是业务和应用的创新。物联网技术与智能化技术的深度融合&#xff0c;加快了行业的智能化发展&#xff0c;促使了行业需求在应用层上的落地。安防技术架构是物联网架构的一个子集&#xff0c;传统安防是一个相对保守的行业。现代安防和物联网在业务和技术上的融合发…

一个强大的工具来模拟数百万​​并发用户负载测试:Gryphon

Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件&#xff0c;目的是能够用较少的资源来模拟出大量并发用户&#xff0c;并且能够更加真实地进行压力测试&#xff0c; 以解决网络消息推送服务方面的压力测试的问题和传统压力测试的问题。Gryphon分为两个程序&…

java 反射与泛型_Java基础系列 - 泛型和反射机制

package com.test5;import java.lang.reflect.Field;import java.lang.reflect.Method;/*** Java泛型和反射机制(泛型的好处 代码安全简单&#xff0c;自动装箱拆箱&#xff0c;提高代码的重用率)*/public class test5 {public static void main(String[] args) {Employer empl…

Linux环境下的Popush部署——张凯

完成情况&#xff1a; 已按照相关部署文档完成了所有任务&#xff0c;包括软件包的安装与配置&#xff0c;以及对各种开发语言的支持&#xff0c;以及gdb的调试功能的支持 遇到的主要问题&#xff1a; 由于从大二以来我基本上所有的开发工作都是在Linux下做的&#xff0c;因此对…

【c++】标准模板库STL入门简介与常见用法

一、STL简介 1、什么是STL STL&#xff08;Standard Template Library&#xff09;标准模板库&#xff0c;主要由容器、迭代器、算法、函数对象、内存分配器和适配器六大部分组成。STL已是标准C的一部分&#xff0c;使用STL开发系统可以提高开发效率。 2、容器&#xff08;Cont…

强连通分量(学习心得)

定义&#xff1a;有向图强连通分量&#xff1a;在有向图G中&#xff0c;如果两个顶点vi,vj间&#xff08;vi>vj&#xff09;有一条从vi到vj的有向路径&#xff0c;同时还有一条从vj到vi的有向路径&#xff0c;则称两个顶点强连通如果有向图G的每两个顶点都强连通&#xff0c…

java for的增强_Java基础之增强for循环

平时大家for循环应该用的不少&#xff0c;特别是增强for循环&#xff0c;简单快捷。但是在增强for中做删除操作&#xff0c;却会抛出java.util.ConcurrentModificationException&#xff0c;一起来看下。上面的代码&#xff0c;在for循环执行完if中的remove&#xff0c;遍历下一…

window.history 和 DWZ 框架

DWZ框架的ajax请求返回的一般都是一个HTML片段&#xff0c;整个页面是由一个个HTML片段组成的&#xff0c;可以由TAB切换其内容&#xff0c;但是只有一个body和HEAD&#xff0c;一般head 和 菜单栏是不会动的。 今天遇到一个问题&#xff0c;当一个点击进入一个tab页面时&#…

大道至简(第六章)读后感

大道至简&#xff08;第六章&#xff09;读后感 还是不乐意去读&#xff0c;但总算可以耐心的读下去了&#xff0c;这也许也算是读大道至简以来的收获之一吧。第六章的题目是从编程到工程&#xff0c;看到工程二字&#xff0c;让我不由想起了前几天和高中同学聊天。他报的燕大土…