A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Demo
{
public static void main(String[] args)

        {
        int i = 3;               
      for(int j = 0; j < 5;j++)
        {
             i =i++;//在这里是怎么运算的,为什么没有i+1?
        }

      System.out.println(i);

9 个回复

倒序浏览
  1. public static void main(String[] args)

  2.         {
  3.         int i = 3;                //定义一个变量 i=3
  4.       for(int j = 0; j < 5;j++)   //for循环  
  5.         {
  6.              i =i++;//  i=i++(先赋值在自增)  i = 3   i++ =4
  7.         }

  8.       System.out.println(i);
复制代码
//输出3   (如果是++i 第一个输出的就是4)
回复 使用道具 举报 1 0
  1. public static void main(String[] args)

  2.         {
  3.         int i = 3;                //定义一个变量 i=3
  4.       for(int j = 0; j < 5;j++)   //for循环  
  5.         {
  6.              i =i++;//  i=i++(先赋值在自增)  i = 3   i++ =4
  7.         }

  8.       System.out.println(i);//输出3   (如果是++i 第一个输出的就是4)
  9. }
复制代码
回复 使用道具 举报
一般都是i++;或者i=i+1;吧  虽然我也不知道为什么i=i++;即没有报错,i的值也没变
回复 使用道具 举报
本帖最后由 骄阳登峰 于 2016-5-17 07:23 编辑
hycold 发表于 2016-5-17 01:43
一般都是i++;或者i=i+1;吧  虽然我也不知道为什么i=i++;即没有报错,i的值也没变 ...

i=i++;这样写法是没有错误的,
回复 使用道具 举报
本帖最后由 骄阳登峰 于 2016-5-17 07:23 编辑

class Demo {
        public static void main(String[] args) {
                int i = 3;
                for (int j = 0; j < 5; j++) {
                        i = i++;
                        /*i=i++;在试行过程中如下:
                     int temp=i;//temp=3
                     i=i+1;//i=4
                     i=temp;//i=3

                      */
                }
                System.out.println(i);
        }
}

这个程序输出的i等于几?
答案是:3
解析:i++是一个表达式,是有返回值的,它的返回值就是i自加前的值
Java对自加是这样处理的:
首先把i的值(注意是值,不是引用)拷贝到一个临时变量区temp,然后对i变量加1,最后返回临时变量区temp的值。
程序第一次循环时的详细处理步骤如下:
步骤1 JVM把i值(其值是3)拷贝到临时变量区temp
步骤2 i值加1,这时候i的值是4
步骤3 返回临时变量区temp的值,注意这个值是3,没修改过。
步骤4 返回值赋值给i,此时i值被重置成3。

注意:        i=i++;在试行过程中如下:
        int temp=i;
        i=i+1;
        i=temp;


回复 使用道具 举报 1 0
这个问题的解决方法很简单,只要把 “i=i++”修改为“i++”即可。
每种语言对自增的实现方式各不同,该问题在于不同的语言环境有不同的实现:
C++中“i=i++”与“i++”是等效的,在Java和php中则是上述处理方式。
回复 使用道具 举报
骄阳登峰 发表于 2016-5-17 07:07
class Demo {
        public static void main(String[] args) {
                int i = 3;

受教~\(≧▽≦)/~啦啦啦 谢谢
回复 使用道具 举报
i=i++;
是先完成3赋值给i,然后i再自增。
回复 使用道具 举报
这个比较好……感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马