黑马程序员技术交流社区

标题: 关于变量自增的问题 [打印本页]

作者: java陈辉    时间: 2013-12-4 21:44
标题: 关于变量自增的问题
本帖最后由 java陈辉 于 2013-12-5 20:55 编辑

帮我看一下下面的i为什么等于3?而不是等于4呢?
public class Test3 {
    public static void main(String[] args) {
    int i = 3;
    i = i++;
    System.out.println("i="+i);
   }
}
以上代码的打印结果是i=3,如果只看左边的话,i是等于3,但是看右边的话,不管i是前加,还是后加,其结果都是要加1的,所以右边的i不是等于4吗?所以说,结果可以等于3,也可以等于4。为什么打印结果只显示i=3,而不是i=4呢?求解。

作者: HAnG    时间: 2013-12-4 21:47
i = i++是先给左值赋值了,再自增。
先自增后赋值的话用++i
作者: ily521125    时间: 2013-12-4 21:58
本帖最后由 ily521125 于 2013-12-4 22:00 编辑

i++表示的是i先参与运算然后再自增1
i=i++;表示的是将表达式i++的值赋给了i;表达式i++的值是3
作者: 绕世界流浪丶    时间: 2013-12-4 22:00
  1. public class Test3 {
  2.     public static void main(String[] args) {
  3.     int i = 3;
  4.     i = i++;
  5.     System.out.println("i="+i);
  6.    }
  7. }
复制代码

你这个i = i ++;
是先赋值给i,然后i才自增  
++在后面的时候是先执行操作 然后在执行自增
作者: 橸瑩膤漃寞林    时间: 2013-12-4 22:01
public class Test3 {
    public static void main(String[] args) {
    for(int i=3;i<=4; i++)
    System.out.println("i="+i);
   }
}
你在里面加个for循环,就可以打印出3,4了。你那样写的确实是右边在等于3的情况下赋值给左边。
作者: 然后呢    时间: 2013-12-4 22:20
++i是先加后赋值,i++是先赋值后加的,java中一个 = 号不是等于的意思,是赋值的意思。==才是等于的意思。
作者: 关静刚    时间: 2013-12-4 22:38
本帖最后由 关静刚 于 2013-12-4 22:39 编辑

先举个例子帮助你理解++:

例子1:先自增再赋值,a=2;b=++a;
运算结果是a=3,b=3

例子2:先赋值再自增,a=2;b=a++;
运算结果是a=3,b=2

自减同理

public class Test3 {
    public static void main(String[] args) {
    int i = 3;
    i = i++;//i先赋值,i就等于3,之后i才自加
    System.out.println("i="+i);//打印的是赋值后的i,所以打印的是3
   }
}

作者: ixiangfeng    时间: 2013-12-4 22:51
被楼主一说我也有点迷糊了 好像上面都没理解啊
楼主想问的是
int i = 3;
i = i++;
System.out.println("i="+i);//打印结果为3,那i= i++;先赋值3给i,然后再进行自增,那自增后不就是代表i为4了吗,我也有点疑惑 去百度一下先
作者: ixiangfeng    时间: 2013-12-4 23:06
去百度了下 这个问题还是比较复杂的 简单来说 i = i++;这语句其实分为temp=i;i++;i=temp 想了解更详细的去百度下吧
作者: 珊湖礁    时间: 2013-12-4 23:07
i=i++;与i=++i;是两种不同的概念,i=i++,是先把 i 的值赋给左边;而i=i++是i进行一次自家之后然后才赋值给左边。

作者: ixiangfeng    时间: 2013-12-4 23:08
橸瑩膤漃寞林 发表于 2013-12-4 22:01
public class Test3 {
    public static void main(String[] args) {
    for(int i=3;i

这是变量自增赋值给同一变量,你这样说那赋值给那变量后再自增,那谁来自增? 变量自增的话那不就变为4了
作者: 橸瑩膤漃寞林    时间: 2013-12-5 15:39
public class Test3 {
    public static void main(String[] args) {
           int i=3;
           i=++i;
    System.out.println("i="+i);
   }
}
这样子写打印出来就是4。
作者: ixiangfeng    时间: 2013-12-5 15:49
橸瑩膤漃寞林 发表于 2013-12-5 15:39
public class Test3 {
    public static void main(String[] args) {
           int i=3;

i = ++i; 这行代码按一般人的理解都是没问题的
问题是i = i++;这代码的执行和我们平时想的有点不一样
作者: 大雄9293    时间: 2013-12-5 16:18
i=i++是先赋值i的初值也就是3,然后再进行自加1的操作
i=++i是先自加1得到结果4再进行赋值
作者: ixiangfeng    时间: 2013-12-28 18:46
挖矿咯,大家一起挖矿咯,V5,黑马程序员
作者: 由然自美    时间: 2013-12-28 20:23
++在后,先算结果,++在前,先自增在算结果
作者: 李兴    时间: 2013-12-29 17:00
i=i++为前自增,先把i的值3赋给前面,再执行加一操作,即是
  1. i=i;i=i+1;
复制代码

i=++i为后自增,先执行加一操作,再执行赋值操作,即使
  1. i=i+1;i=i;
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2