你知道i=i++;的含义吗?原理其实没有你想的那么简单

i++和++i我们都知道,但是你知道i=i++;吗?

自上学时,老师就说i++是先赋值再加,而++i是先加再赋值,比如我们写个代码举下例子:

i++:

/*** 自增案例*/public static void testZiZeng(){int i = 1;int a = i++;System.out.println("a="+a);System.out.println("i="+i);}

其运行结果是:

a=1
i=2

++i:

public static void testZiZeng(){int i = 1;int a = ++i;System.out.println("a="+a);System.out.println("i="+i);}

其运行结果为:

a=2
i=2

运行结果解释:

i的值没的说,不管是++i还是i++,都是在原来值的基础上自身加1,这个很好理解,不好理解的是a的值:

  • 第一个案例中,a = i++;相当于是这样的,a = i,i++,那么a的值自然就是1了。

  • 第二个案例,a = ++i,相当于i先++(此时i从1变成了2),然后在将i的值赋值个a,那么a自然而然也就成2了。

这一部分理解了,我们接着看下一个i=i++;

某天,给学生们写了一段代码:

public static void testZiZeng(){int count = 0;for(int i = 0;i<10;i++){count = count++;}System.out.println("count="+count);}

代码写完之后,问:“谁知道count的值是多少?”

王同学和刘同学在简单计算之后争相往起站:“老师,是10”,其他人也附和“没错,是10”,“对,就是10”……大家都陆陆续续的说出了自己心中的正确答案。

“小点声,你们说的是错的!别这么大声……”看着大家这么积极的回答,我不忍心的劝说道。

于是大家都用惊愕的眼神看着我,眼神里仿佛写着,十万个为什么。

其实正确答案是:

(点击空白处查看答案)

count=0

接下来我们分析一下为什么?

点点下面的小卡片就是对我莫大的支持,谢过啦~

count++是一个表达式,是有返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。

用代码解释为这样的:

int temp = count; //先把i变量的值10保存到临时变量中
count = count+1; // i变量的值加1操作
count = temp; //再把临时变量中的值赋值给i

程序第一次循环时的详细处理步骤如下:

  •  JVM把count值(其值是0)拷贝到临时变量区。

  •  count值加1,这时候count的值是1。

  • 返回临时变量区的值,注意这个值是0,没修改过。

  • 返回值赋值给count,此时count值被重置成0。

知道为什么了吧!

老师,我没有学过事务……同学你过来,你看老师手里拿的是什么?

2020-06-11

sql server高级查询,看这篇文章就够了

2020-06-09

Linux基础知识之【简介与安装】

2020-06-08

教你2分钟永久激活win10系统手慢无……

2020-06-03

3分钟内看完这,bootstraptable表格控件,受益匪浅!

2020-06-02

觉得好看,点击这里

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

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

相关文章

jQuery 的选择器

01、基本选择器 标签选择器 $(“a”) ID选择器 $(“#id”) $(“p#id”) 类选择器 $(“.class”) $(“h2.class”) 通配选择器 $("*") 并集选择器$(“elem1,elem2,elem3”) <script type"text/javascript">$(function(){/*******id选择器*********…

学会思考,而不只是编程

中国人常说“授之以鱼不如授之以渔”。如果说教授编程是授之以鱼&#xff0c;那么教授计算机科学就是授之以渔。为什么说学习计算机科学比学会编程要重要得多&#xff1f;来听听Yevgeniy Brikman的解释。 现如今&#xff0c;似乎每个人都在学习编程&#xff1a;Bill Gates、Ma…

ssl1562-局域网

局域网 题目 就是一个图&#xff0c;求最小生成树&#xff0c;然后求被去除的边的价值。 输入 用线来表示联通 5 5 1 2 8 1 3 1 1 5 3 2 4 5 3 4 2 输出 去除的边的总价值 8 解题思路 求出最小生成树的价值然后线的总值减去最小生成树的价值 代码 #include<…

什么?java中居然可以执行js代码了?真是不知者不怪

今天在书上看的&#xff0c;java中可以直接调用js的函数了&#xff0c;言外之意就是java已经支持外部的脚本语言了&#xff08;在运行期解释执行的&#xff09;&#xff0c;查了查&#xff0c;jdk从1.6之后开始支持的&#xff0c;1.6之前不可以。 为什么Java这种编译语言还需要…

jQuery 操作元素

01、操作元素的属性 $(function(){$("#but").click(function(){//获得元素的对象var inp$("#zh");//JQ获得属性 inp.attr("value")&#xff1a;获得的默认的值console.log(inp.attr("type")"----"inp.attr("name&q…

用 Docker Machine 创建 Azure 虚拟主机

搭建环境向来是一个重复造轮子的过程&#xff0c;Docker Machine 则把用户搭建 Docker 环境的各种方案汇集在了一起。笔者在《Docker Machine 简介》一文中演示了使用 Docker Machine 在本地的 vSphere 主机中安装 Docker 环境。但是在云计算大爆炸的今天&#xff0c;真正让我们…

ssl2345-繁忙的都市

题目 一个无向图&#xff0c;求最小生成树里权值最大的那条边 输入 第一行有两个整数n,m表示有n个店&#xff0c;m条边。接下来m行是对每条边的描述&#xff0c;u, v, c表示点u和v之间有边&#xff0c;权值为c。(1≤n≤300&#xff0c;1≤c≤10000) 4 5 1 2 3 1 4 5 2 4…

JQuery 事件绑定

<script type"text/javascript">$(function(){/******单击事件的绑定********/$("#bu1").click(function(){alert("单击事件");})$("#bu1").dblclick(function(){})$("#bu1").blur(function(){ })/******绑定多个事件…

JDK中主要的包

java.lang----包含一些Java语言的核心类&#xff0c;如String、Math、Integer、 System和 Thread&#xff0c;提供常用功能java.net----包含执行与网络相关的操作的类和接口。java.io ----包含能提供多种输入/输出功能的类。java.util----包含一些实用工具类&#xff0c;如定义…

振华重工携手微软,开启港口运营数字化转型新纪元

上海振华重工&#xff08;集团&#xff09;股份有限公司&#xff08;ZPMC&#xff09;是重型装备制造行业的知名企业&#xff0c;是港口机械的领军者。企业的港口机械目前已销往93个国家和地区&#xff0c;全球占有率高达82%&#xff0c;多年保持行业领先的地位。 转型大计提上…

在JavaFX程序中嵌入Swing内容

转载自 在JavaFX程序中嵌入Swing内容 本教程描述如何在JavaFX应用程序中嵌入Swing组件。本文将讨论线程限制并提供一个可运行的应用程序来说明在JavaFX应用程序中嵌入带HTML内容的Swing按钮&#xff0c;以及Swing与JavaFX按钮间的协作性。 从JavaFX 2.0版本开始&#xff0c;…

你胆敢不加break试试?

我们经常在实际开发中会用到一些转换类&#xff0c;比如在金融界中&#xff0c;我们需要将1转换为“壹”&#xff0c;2转换成“贰”。还有类似这样的需求&#xff0c;食堂在一周内每天的菜单都是不一样的&#xff0c;周一为鱼香肉丝鸡腿&#xff0c;周二为爆炒土豆丝鲅鱼&#…

三大特性之继承性

一、继承性的好处&#xff1a; ① 减少了代码的冗余&#xff0c;提高了代码的复用性 ② 便于功能的扩展 ③ 为之后多态性的使用&#xff0c;提供了前提 二、继承性的格式&#xff1a; class A extends B{} A:子类、派生类、subclass B:父类、超类、基类、superclass 2.1体现&…

ssl2346-联络员【图论,最小生成树】

题目 一个图&#xff0c;给几条固定的边&#xff0c;求最小生成树 输入 第一行n&#xff0c;m表示n个点&#xff0c;有m条边&#xff0c;每行四个非负整数&#xff0c;p,u,v,w 当p1时&#xff0c;表示这个边为固定边&#xff08;必须要&#xff09;&#xff1b;当p2时&#…

JQuery 动画效果

掌握要点 显示隐藏show() hide() 改变width、height、opacity 淡入淡出fadeIn() fadeOut() 改变opacity 滑入滑出slideDown() slideUp() 改变height&#xff08;对于img同时改变height和width&#xff09; 隐藏的显示/显示的隐藏 toggle() 参考网站&#xff1a;http://www.jq2…

微软作为金牌会员加入Cloud Foundry基金会

在最近召开的Cloud Foundry峰会上&#xff0c;微软宣布他们已经加入了Cloud Foundry基金&#xff0c;成为金牌会员。除此之外&#xff0c;微软正在加大对开源云平台的支持力度&#xff0c;他们提供的服务包括Azure数据库&#xff08;PostgreSQL和MySQL&#xff09;的后端集成以…

你胆敢在case后面不加break试试?

我们经常在实际开发中会用到一些转换类&#xff0c;比如在金融界中&#xff0c;我们需要将1转换为“壹”&#xff0c;2转换成“贰”。还有类似这样的需求&#xff0c;食堂在一周内每天的菜单都是不一样的&#xff0c;周一为鱼香肉丝鸡腿&#xff0c;周二为爆炒土豆丝鲅鱼&#…

在Swing和Swt中使用JavaFX

转载自 在Swing和Swt中使用JavaFX 本人从08年12月份&#xff0c;JavaFX发布第一个版本开始关注它的发展。 算算到现在&#xff0c;也差不多是第五个年头了。期间经历了一些动荡&#xff0c;但JavaFX还是坚持着发展了下来&#xff0c;也经历了很多改变(这也是Java技术的特点&a…

三大特性之封装性

体现一 Java中通过将属性声明为私有的(private)&#xff0c;再提供公共的&#xff08;public&#xff09;方法:getXxx()和setXxx()实现对该属性的操作&#xff0c;以实现下述目的&#xff1a; 隐藏一个类中不需要对外提供的实现细节&#xff1b; 使用者只能通过事先定制…

JQuery 表单校验

表单校验的作用 为什么要进行表单验证&#xff1a;保证数据符合要求 为什么要进行JavaScript或者jQuery表单验证&#xff1a; 1.降低服务器端负担 2.还可以进行服务器验证&#xff08;JSP&#xff09; 正则表达式 为什么使用正则表达式&#xff1a; 简洁的代码 严谨的验证文…