对i++和++i 一直有点晕,今天专门抽空来研究相关的知识。

先从简单的说起。

有如下程序:

int i=0;

i=i++;

system.out.print(i);

一眼望去这个结果显而易见是1,但是事实确不是。结果是0.

因为i++是先执行赋值操作,在执行自增操作。

也就是说i=i++ 是先将0赋值给i,然后再自增。那奇怪了,结果也应该是1啊,但是为什么结果还是0呢。

从这个例子,我们来说明第一个,也就是为什么i++赋值给i后,i依然为0.

我个人的理解:

i 在初始化的时候,系统会将 i 指向系统堆栈中为0的地方。

执行i=i++ 时,是先将右边的 i 赋值给i的,也就是说,此时结果没有变。但是之后会执行i++,

但执行完后,结果是1,虽然结果变了,但是指向i的指针依然是堆栈上值为0的那个地址。所以结果为0.

我们再看下面一个复杂的例子。

k=0;

k=k++ + k++  + ++k;

为了方便叙述,等号右边,依次记为K1,K2,K3

程序执行:

1)K1,此时k值没有变,为0.

2)K2,  此时k值依然没有变,为0.但是 因为前面有个++,故此时需要加1.则此时k=1

3)K3,执行完K3时,k=2,但是由于前面有个++,实际k=3

则结果为4.

关于JAVA那点事---i++和++i的更多相关文章

  1. Java的哪些事

    Java的哪些事--------------------------------------------------Java学习分2个方面: Java语法与Java类库 Java: A simple, ...

  2. Java 编码那些事(二)

    建议先阅读:Java 编码那些事(一) 现在说说编码在Java中的实际运用.在使用tomcat的时候,绝大部分同学都会遇到乱码的问题,查查文档,google一下解决方案啥的,都是设置这里,设置那里,或 ...

  3. 入坑java工程师那些事

    最近在知乎上看到好多关于转行做java的朋友,有的在担心学历,有的在想着如何学习java,有的在纠结如何面试.作为一个工作了近10年的java程序员来聊聊我的一些想法,主要从学历.个人能力.工作环境等 ...

  4. Java这点事

    1--代码片段:  1 2 3 4 5 byte b1=1,b2=2,b3,b6;  final byte b4=4,b5=6;  b6=b4+b5;  b3=(b1+b2);  System.out ...

  5. Java Thread 那些事

    这篇文章被压在草稿箱许久,最近公司内部的技术社区有同学贴出了几篇分享 Java线程的文章,发觉有很多概念没有讲清楚,所以花点时间继续撰写,便有了这篇博文. 本文只聚焦 JVM 层面的线程模型,不考虑和 ...

  6. 2017.12.24 Java序列化你不知道的事(二)

    1 序列化允许重构 序列化允许一定数量的类变种,甚至重构之后也是如此,ObjectInputStream 仍可以很好地将其读出来. Java Object Serialization 规范可以自动管理 ...

  7. java异常那些事

    异常的基本定义: 异常情形是指阻止当前方法或者作用域继续执行的问题.在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因 ...

  8. Java——异常那些事

    异常的基本定义 异常情形是指阻止当前方法或者作用域继续执行的问题.在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就 ...

  9. Java——Java集合那些事

    集合概述: 集合和数组都可以保存多个对象,但是数组的长度不可变,集合可以保存数量变化的数据.java中的集合类主要由两个接口派生出,Collection和Map Collection接口和Iterat ...

  10. Java面试那些事

    网址链接:https://mp.weixin.qq.com/s/BkiDwyjua4iwws7gWHwK9Q 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试 ...

随机推荐

  1. The Datastore

    [中央数据库模式难扩展]绝大多数的Web应用在处理一个为了以后的请求作检索用的请求时,需要存储信息.<1.Most useful web applications need to store i ...

  2. 使用DBCC SHOW_STATISTICS展示索引的统计信息

    在开始之前搭建演示环境: USE master GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassA', N'U') IS NOT NULL DROP TAB ...

  3. PHP网站简单架构 – 单独跑php-fpm

    这个架构比较简单,不做过多的说明 前端1台Nginx:负载均衡+nfs 中间2台php:php-fpm 后端1台数据库:MySQL 安装略,参考<lnmp最新源码一键安装包> 192.16 ...

  4. CoffeeScript学习(3)—— 函数

    CoffeeScript函数 如果大家有看我之前关于ES6的箭头函数的话,这一篇也不会很难理解.我们这一次可以说一下,关于两者的一些细微差别. 基本 在CoffeeScript中,任何函数都是用箭头函 ...

  5. 【C++专题】static_cast, dynamic_cast, const_cast探讨

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  6. [Xcode使用 - 4] 真机调试配置

    A.步骤 1.申请开发者账号 2.注册机器成为开发机器 (1)生成证书请求文件 (2)上传请求文件 (3)生成cer证书文件: **.cer (4)下载cer证书   3.注册测试程序ID:APP I ...

  7. VHDL的testbench的编写(转)

    大多数硬件设计人员对verilog的testbench比较熟悉,那是因为verilog被设计出来的目的就是为了用于测试使用,也正是因为这样verilog的语法规则才被设计得更像C语言,而verilog ...

  8. SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化

    SQL性能优化:http://www.cnblogs.com/CareySon/category/360333.html Select count(*)和Count(1)的区别和执行方式 在SQL S ...

  9. git乱码问题

    直接看连接吧. http://my.oschina.net/lujian863/blog/168837

  10. 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

    /**     * 使用sql语句进行查询操作     * @param sql     * @return     */    public List queryWithSql(final Stri ...