关于自增运算符和java的中间缓存变量机制

allegro如何设置走线等长 设置走线等长! 阅读详情

本文对java/c/c++的自增运算符的运算过程进行详细说明。面试中经常会有这类题目,希望可以帮助到大家。

用下面的例子说明。

1、

(1)、如下代码,在java中的运行结果是:sum1 = 1    sum2 = 3。

public static void main(String[] args)
{
     int i, sum1, sum2;
     
     i=0;
     sum1 = (i++)+(i++);
     System.out.println("sum1="+sum1);
     
     i = 0;
     sum2 = (++i)+(++i);
     System.out.println("sum2="+sum2);	 
}

       分析如下:

       对于sum1来说,执行sum1=(i++)+(i++);创建了2个临时的整型变量对象,对来存储每次自增运算的结果。具体执行过程是

temp1 = i;     // temp1 = 0
i = i + 1;        // i = 1
temp2 = i;     // temp2 = 1
i = i + 1;        // i = 3
sum1 = temp1 + temp2;     // sum1 = 1
</span>
      对于sum2来说,大家应该都很清楚。

(2)、java采用了这种中间缓存变量的机制。再看程序员面试宝典中一个很经典的例子:

public static void main(String[] args)
{ 
        int j = 0; 
        for(int i = 0; i < 100; i++) 
            j = j++; 
        System.out.println(j); 
    } 
    对java来说,j的输出值是0。

    因为java的中间缓存变量机制使j=j++语句看以分解成如下操作:

temp = j; 
j = j + 1; 
j = temp; 

2、如下代码,在c语言中的运行结果是:sum1 = 0    sum2 = 4。

void main()  
{
    int i,sum1,sum2;
    i=0;
    sum1=(i++)+(i++);
    printf("sum1=%d\n",sum1);
    i=0;
    sum2=(++i)+(++i);
    printf("sum2=%d\n",sum2);
    getchar();
}

     分析如下:

      在c语言中,每个变量在它的生命周期内的每个时间点都只能有一个唯一的值。因此变量在每一次自增运算时,变量所对应内存区域的内容就被重写了。

      可能有读者有疑问,为什么sum1 = 0而不是1。这是因为“先用后变”这个概念很模糊,后都什么时候,不同的书上说法不一。笔者机器运行结果是0,说明后是后到整个表达式运算完毕。

      对于sum2,就比较简单了,++i运算完i = 1,第二个++i运算完i + 2,根据第一句话写的,应该是2 + 2 = 4。




ARM功耗管理软件之DVFS&AVS 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS? 阅读详情

相关推荐

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 247

Java中的自增操作符与中间缓存变量机制

我们来看这样一段程序: public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i)

Maggie's Blog 8058

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

Java的中间缓存变量机制与自增操作符

一大早起来,本想做个小题练练手,没想到居然被难住了!!先把题目贴上,各位先做做看: 求输出结果 1.public static void main(String[] args){ int j=0; for (int i = 0; i j = j++; } System.out.println(j); 2. [java] view plaincopy

张拭心的博客 shixinzhang 1967

全志平台Sensor驱动移植实战:从点亮到调优的完整指南

本文详细介绍了在全志平台上进行Sensor驱动移植的全过程,从硬件引脚配置到软件参数调优,涵盖点亮、出图和调优三大阶段。重点解析了OV02B10传感器的I2C通信建立、上电时序调试和初始化参数配置等关键技术点,并提供了实用的调试技巧与问题排查指南,帮助开发者高效完成全志平台Sensor驱动移植工作。

weixin_28727975的博客 218

Flutter连接蓝牙打印机打印(含中文、双排打印)

Flutter连接蓝牙打印机打印(含中文、双排打印)

Session_W的博客 701

java 变量作用域 c语言_Java中的自增操作符与中间缓存变量机制以及和C语言的不同...

我们来看这样一段程序:publicstaticvoidmain(String[]args){inti,sum1,sum2;i=0;sum1=(i++)+(i++);System.out.println("sum1="+sum1);i=0;sum2=(++i)+(++i);System.out.println("sum2="+sum2);}它的运行结果是:sum1=1sum2=3而...

weixin_34954140的博客 161

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6586

中间变量缓存机制

中间变量缓存机制

THZ的博客 427

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3109

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

算法大师! 990

Java中间缓存变量机制

在java中存在一个缓存变量机制,java会将临时的变量存储在缓存变量中,在自增和自减运算中都会用到java的缓存变量。 在《java程序员面试宝典》这本书中,就连续的用到了缓存变量机制。下面是转载自way菜哇的博客,写的很好,非常的详细。http://blog.youkuaiyun.com/waycaiqi/article/details/43486249 对java缓存变量不清楚的可以好好看看这篇博客。

做一名努力的通信程序员 620

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java变量a自增_Java中的自增操作符与中间缓存变量机制

作者:MaggieDorami我们来看这样一段程序:publicstaticvoidmain(String[]args){inti,sum1,sum2;i=0;sum1=(i++)+(i++);System.out.println("sum1="+sum1);i=0;sum2=(++i)+(++i);System.out.println("sum2="+sum2);}它的...

weixin_39918588的博客 233

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

浅谈Java中间缓存变量机制

package com.magiclab.magic; public class Test1 { /**主函数 * @param args */ public static void main(String[] args) { int j=0; for (int i = 0; i { /** * 注意:该处使用了中间缓存变量的机制相当于 *

lovemagicq的专栏 352

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JAVA中while判断中变量自减_java中自增自减运算与c中自增自减的区别

今天看到java面试宝典里面有一道题目是这样的:答案是0,我开始也有疑问,后来看到后面说到java的中间缓存变量,后来到网上查了查,终于理解了,是什么意思了。请看下面的代码和解释:package com.wj.demo;public class Test1 {/*** @param args*/public static void main(String[] args) {// TODO Auto...

weixin_39927059的博客 293

Java中间变量缓存机制的理解

控制台输出结果为:0 控制台输出结果为:100 Java使用中间变量缓存机制。执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋予了值的临时变量。 j=j++;两个操作:赋值,自增。赋值可以分解为两个操作

sweetyIT的博客 597

Java中间变量缓存机制

对于自增运算++j与j++,由于加一的执行顺序不同,所以Java中有中间缓存变量来储存其单个表达式的值,而j的自增自减的结果依然保留在原来的变量储存区。   因为本体是j的值,而单个表达式的值是中间产生的一个临时变量值,是在整条计算表达式结束后就可以抛弃的值,所以用个临时中间缓存变量在放就可以了。这就可以实现自增自减运算在计算时值的加减1顺序差异产生的表达式与本体值差异的两个变量储存。   因

d1067432674的博客 256

java中自增自减运算与c中自增自减的区别

java中的++,--操作和c语言的++,--操作的区别

wj903829182的专栏 3671

我爱学Java之中间缓存变量机制

有一段代码如下:public class Test {     public static void main(String[] args) {       int j = 0;       for (int i = 0; i < 100; i++) {         j = j++;

JavaSheng的专栏 760

面试题---中间缓存机制

面试题---中间缓存机制

m0_73858774的博客 194

《Java程序员面试宝典》5.2.3——中间缓存变量机制

看到第三版中5.2的例题4,一开始只是简单地接受中间缓存变量的机制,例题如下:   public class Test {     public static void main(String[] args) {       int j = 0;       for (int i = 0; i < 100; i++)

waycaiqi的专栏 3657

《Java程序员面试宝典》5.2——中间缓存变量机制

转载自:http://blog.youkuaiyun.com/waycaiqi/article/details/43486249 看到第三版中5.2的例题4,一开始只是简单地接受中间缓存变量的机制,例题如下: [java] view plain copy   public   class   Test {        public   stati

半个橙子的博客 519

java 自增_java中的自增问题介绍

运行下面这段代码,其结果是什么呢?package com.test;public class Inc {public static void main(String[] args) {Inc inc = new Inc();int i = 0;inc.fermin(i);i = i++;System.out.println(i);}void fermin(int i) {i++;}}结果是:0上述...

weixin_35505988的博客 838

HangZhou Java Journey P1

重新理解java世界中的一些超级酷的思想设计 )

多头注意力探索Now 1040

JAVA--浅谈java中间缓存变量机制---(j++和++j的区别)

/** *java中间缓存变量 */

1073
上一篇: java/c/c++/c#参数传递问题
下一篇: TCP/IP三次握手与四次握手
胡子先生v_v
博客等级 码龄14年 5粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值