Java中i = i++;与C++中i = i++;结果比较

c中i=i++问题 #include <stdio.h> int main(){ int i = 0; i = i++; return 0; } 从上一篇文章java中i=i++问题中可以看到在Java中输出结果为0,但是在c语言中,微软的编译器与GCC编译器的结果是不同的,采用VS2017编译运行,输出i的值为1,用gcc编译运行,输出结果为0。 首先分析VS2017的输出结果,通过反编译得到程... 阅读详情

今天碰到一个有趣的代码,原以为so easy,结果却狠狠打脸。。。

Guess the result of the following two code snippets
  • Java
    int num = 0;
    for (int i = 0; i < 100; i++) {
        num = num++;
    }
    System.out.println(num);
    
  • C++
    int num = 0;
    for (int i = 0; i < 100; i++) {
        num = num++;
    }
    cout<<num<<endl;
    
Result(可自行尝试)
  • java(0)
  • C++(100)
What? Why?
Analyze
  • java
    i = i++;//可分解为下面3步
    //1.先将i的值存入临时变量 
    int temp = i;//temp此时为0
    //2.i进行自加
    i = i + 1; //i此时为1
    //3.执行赋值语句将临时变量
    i = temp;//i此时又变回0
    

    来自于网友的分析:
    jvm中有两个存储区,一个是暂存区(一个堆栈),另一个是变量区。当执行i=i++时,jvm先将i=0压入堆栈,再执行i+1,然后再将堆栈中的i=0取出赋值给左边的i,从而使输出结果为0;

  • C++

    C++中所有操作都是在内存中进行的,所以结果为100。

Java中关于i = i++问题 Java中关于i = i++问题 之前刚学Java的时候一直有个i++的问题不明白,直到今天再次看见这个问题的时候,查找了很多大佬的博客,终于搞懂了这部分的原理。话不多说上代码: 1 int j = 0; 2 j = j++; 3 System.out.println(j);//输出结果为 0 以前学习C/C++的时候结果是1,因为C/C++的操作都是在内存中进行的。但是Java是有虚拟机的,由于虚拟机把内存的划分和C/C++有很大的区别,所以执行的结果完全不同。 阅读详情

相关推荐

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南

本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。

weixin_42525005的博客 220

c++中i = i++的思考?

在之前java中思考 int i = 0; i = i++; System.out.println(i); 结果 i = 0; 它是由生成的bytecode决定   而在c++中. int i = 0; i = i++; cout &lt;&lt; i &lt;&lt; endl; 结果 i = 1; 在vs2010中反汇编得到如下指令 所以结果为1...

冯建华的专栏 1138

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

C语言 & Java 解析:当 i = i++ 后,结果究竟是什么?

前言: 之前有朋友跟我讨论过一个问题,他问在java中,i=1;i=i++;之后的结果时什么,我一开始认为是2,但当他说答案是1的时候,我不得不想一个合理的解释,我想,可能是因为临时变量,当i赋值给i后,自增更改了临时变量,所以i值并没有改变。当我在为我的解释表示满意时,他们说在c语言下的答案是2,好吧,我只能说是编译器的实现不同,当然这个答案太没说服力了,所以寻找答案的任务就开始了。 我先在《c++ primer》上看见这样的解释:“++i的效率要比i++的效率高,因为i++必须要有一个临时变量来

致力于C语言C++知识分享! 1191

大模型时代的具身智能系列专题(二)

自由形式语言指令 L 指定了一个操作问题,例如“打开最顶部的抽屉”。然而,根据 L 生成机器人轨迹是很困难的,因为 L 可能具有任意长度,或者是不明确的(例如,需要上下文语义)。相反,我们专注于问题的各个阶段(子任务)l_i,它们明确地指定了一个操作任务 (例如,“抓住抽屉把手”,“打开抽屉”),其中被分解的子阶段(子任务)L→l1l2lnL→l1​l2​...ln​由高级规划器(例如,一个LLM或一个基于搜索的规划器)给出。

achao的专栏 2171

SARScape实战:集成GACOS数据优化InSAR大气校正全流程

本文详细介绍了如何在SARScape软件中集成GACOS数据,以优化InSAR大气校正的全流程。通过实战步骤,从GACOS数据申请、下载、导入,到在单景干涉图和SBAS-InSAR流程中应用,有效剥离大气相位延迟,显著提升形变监测结果的精度与可靠性,实现从“雾里看花”到“拨云见日”的转变。

weixin_28419039的博客 399

i = i++ 计算过程还不会?C/C++ 的输出语句与Java 有何不同?

最近身边的朋友分享了一些有趣的算法题给我,我看到题后直接不假思索的说出了我的答案,然而没有一道说对的,顿时我的脾气就上来了,通过查阅资料并与同学讨论,最终从语言特点以及汇编层面解决了问题。接下来我把三道题目放出来,大家尽情作答,看看你是否能成功入坑。

叶落秋白的博客 1448

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

i = i++ 的困惑

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

陈满的专栏 1009

NPC 三电平逆变器中点电位平衡算法详解

最常用:零序电压注入(简单、计算量小)最可靠:虚拟空间矢量调制(VSVPWM)及其改进形式(全范围平衡)趋势:结合模型预测控制(MPC)或智能算法(模糊、神经网络)进一步提升动态性能和鲁棒性。NPC 三电平逆变器中点电位平衡算法的 C# 实现示例(零序电压注入法 + 闭环补偿)在 NPC(Neutral Point Clamped)三电平逆变器中,中点电位平衡最常用且易于软件实现的方案是零序电压注入法。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 325

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 354

i = i++;

public class Test ...{    public static void main(String[] args) ...{        int i = 1;        i = i++;        System.out.println(i);    }} 先想一想,这个程序会输出什么?是1还是2?按照我最初的想法,输出应该是2,因为把i赋值给i相当于

初晨的天空 5万+

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

自增与自减的机制——为什么 int i = 0; i = i++; i 的结果为0?

1.问题 Java 中运行以下代码 : public static int test() { int i = 0; i = i++; return i; } 返回结果为:0 2.JVM执行的代码 直接在Windows命令窗口中使用 javap -c XXX 查看JVM执行的代码: public static int test(); Code: 0: iconst_0 ...

PassionZheng的博客 2689

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java中i=i++;运算结果

Java中i=i++;运算结果 分类: java 2011-09-17 00:06 54人阅读 评论(0) 收藏 举报 今天看到一个题,结果和原本想的不太一样,也有些意思,同时也深入地考虑到更多情况。 原本的题大体如下, 以下程序的输出结果是什么? Class Test{   public static void main(String [] args){

塞北萧风 521

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

好神奇,java里的i=i++;

孙华伟的博客 826

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

i = i++;在c++和java下的不同结果。

有如下语句 int i = 0;i = i++; 此时i的值是多少? 在c++和java下有着不同的结果。c++下结果是1。而在java下结果却是0。造成这种不同的根本原因恐怕是由于c++和java的设计思想不同造成的。c++是面向过程的语言,++运算符的意义是执行完当前语句之后,将目标值加1。而java是纯面向对象的。所有运算符都回被当作函数来对待。java中的++运

♨Joe的专栏 994

Java 中的 i = i++ 问题

Java 中的 i = i++ 问题今天实验室几个 Java 技术栈的小伙伴在讨论问题,感觉他们在讨论一个很简单但又很有意思的问题。想到我最近也要用 Java,于是过去看了一下。没想到他们居然像 C/C++ 程序员一样在讨论 i++ 的问题。看来 Java 程序员也不能免俗。而且《Java 程序员面试笔试宝典》也提到了这个问题。网上也可以搜到好多结果。看来这个问题很重要,虽然是个无聊的问题,但说不定

勤能补拙 3716

有关i=i++;的讨论(转载)

[精彩] i = i++; http://www.chinaunix.net 作者:bysea51  发表于:2009-07-02 22:44:30 【发表评论】【查看原文】【Java讨论区】【关闭】 &lt;!-- 正文begin --&gt; public static void main(String[] args){ int i = 0...

gaile的专栏 157

从面试题i = i++; 了解java内存模型

先问大家一个问题: int i = 0; i = i ++; System.out.print(i);// 结果为 0 int i = 0; int j = i ++; System.out.print(j);// 结果为 0 System.out.print(i);// 结果为 1首先该代码在C/C++平台运行 结果是1 因为C/C++所有操作都

just xiaoqiang 2233

i=i++在Java和C++中的输出

i=i++在Java和C++中的输出

u012273328的博客 833

i = i++; in JAVA

i = 0; i = i++;在Java中暂存区和堆栈的区别在JAVA中,得到的结果为0; 而在C++中,得到的结果为1;具体的原因,等对JVM有深入的了解之后再传上来,现在很多博客给的解释对笔者不太有代入感,感觉需要对JVM有进一步理解之后才能更加理解。

hccc1的专栏 282

java与C++ 的i=i++的不同以及定义类的不同

在java中,count = count++ 原理是 temp = count; count = count+1 ; count = temp; 因此count始终是0 这仅限于java 与c++是不一样的 结论,java的count = count++ 不会改变count的值,C++的count = count++ 会改变count的值,java的count = count+1 会改变count的值,C++的count = count+1 会改变count的值 //java count = cou

想握住此生辽阔 321
上一篇: JDK为什么需要配置环境变量呢?(完美解答)
下一篇: 精选牛客网鄙视题&详解(一)【Java部分】
fly-liuhao
博客等级 码龄9年 147粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值