返回首页

java中i=i++问题分析

时间:2013-06-10 23:23来源:知行网www.zhixing123.cn 编辑:麦田守望者

int i = 0; i = i++;

 

结果还是0
为什么?

程序的执行顺序是这样的:因为++在后面,所以先使用i,“使用”的含义就是i++这个表达式的值是0,但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做了++操作后再赋值的,所以最终结果还是0

让我们看的更清晰点:

int i = 0;//这个没什么说的
i = i++;//等效于下面的语句:

 

int temp = i;//这个temp就是i++这个表达式的值
i++; //i自增
i = temp;//最终,将表达式的值赋值给i

这是java里的实现,当然在其他的语言如c或是c++中可能并不是这么处理的,每种语言都有各自的理由去做相应的处理。

这警示我们:不要在单个的表达式中对相同的变量赋值超过一次

让我们从字节码层次看一看,源码如下:

public class Test {

    public static void main(String... args) {

        int i = 0;

        i = i++;

        System.out.println(i);

    }
}

使用javac编译后再使用javap -c Test反编译这个类查看它的字节码,如下(只摘取main方法):

public static void main(java.lang.String[]);

Code:

0: iconst_0

1: istore_1

2: iload_1

3: iinc 1, 1

6: istore_1

7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;

10: iload_1

11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V

14: return

这里,我从第0行开始分析(分析中【】表示栈,栈的底端在左边,顶端在右边):

0:将常数0压入栈,栈内容:【0】

1:将栈顶的元素弹出,也就是0,保存到局部变量区索引为为1(也就是变量i)的地方。栈内容:【】

2:将局部变量区索引为1(也就是变量i)的值压入栈,栈内容:【0】

3:将局部变量区索引为1(也就是常量i)的值加一,此时局部变量区索引为1的值(也就是i的值)是1。栈内容:【0】

6:将栈顶元素弹出,保存到局部变量区索引为1(也就是i)的地方,此时i又变成了0。栈内容:【】

7:获取常量池中索引为2所表示的类变量,也就是System.out。栈元素:【】

10:将局部变量区索引为1的值(也就是i)压入栈。栈元素:【0】

11:调用常量池索引为3的方法,也就是System.out.println

14:返回main方法

------分隔线----------------------------
标签(Tag):Java JAVA龙8娱乐官网手机版 JAVA基础教程 Java源代码 Java技巧
------分隔线----------------------------
推荐内容
  • 如何安装oracle 10g数据库 oracle 10g安装图解

    特意为大家制作了一份 oracle 10g安装图解 ,这样大家在安装的时候就不会出错了,至于...

  • Eclipse 如何安装Spring IDE支持

    ECLIPSE ARCHIVE离线安装包 SIZE 4.6 springsource-tool-suite-3.8.1.RELEASE-e4.6-up...

  • Eclipse 初始设置图解教程

    一、自动补全 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 二、字体设置 ...

  • idear如何配置JRebel实现热部署

    习惯写PHP之后,发现写JavaEE最蛋疼的是每次修改完代码,需要重启Tomcat服务,当项目...

  • java常用设计模式原型模式及深浅拷贝

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的...

  • java中单例模式的4种实现方式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8娱乐官网手机版
  • Photoshop龙8娱乐官网手机版
  • 3DMAX龙8娱乐官网手机版
  • AutoCAD龙8娱乐官网手机版
  • CorelDRAW龙8娱乐官网手机版
  • Matlab龙8娱乐官网手机版
  • 其他龙8娱乐官网手机版
  • .Net龙8娱乐官网手机版
  • Asp龙8娱乐官网手机版
  • Php龙8娱乐官网手机版
  • Jsp龙8娱乐官网手机版
  • Ajax龙8娱乐官网手机版
  • Android教程
  • 其他龙8娱乐官网手机版
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影