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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java陈辉 中级黑马   /  2013-12-4 21:44  /  1874 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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呢?求解。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

16 个回复

倒序浏览
i = i++是先给左值赋值了,再自增。
先自增后赋值的话用++i

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ily521125 于 2013-12-4 22:00 编辑

i++表示的是i先参与运算然后再自增1
i=i++;表示的是将表达式i++的值赋给了i;表达式i++的值是3

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
  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才自增  
++在后面的时候是先执行操作 然后在执行自增

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
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的情况下赋值给左边。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
++i是先加后赋值,i++是先赋值后加的,java中一个 = 号不是等于的意思,是赋值的意思。==才是等于的意思。

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 关静刚 于 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
   }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
被楼主一说我也有点迷糊了 好像上面都没理解啊
楼主想问的是
int i = 3;
i = i++;
System.out.println("i="+i);//打印结果为3,那i= i++;先赋值3给i,然后再进行自增,那自增后不就是代表i为4了吗,我也有点疑惑 去百度一下先

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
去百度了下 这个问题还是比较复杂的 简单来说 i = i++;这语句其实分为temp=i;i++;i=temp 想了解更详细的去百度下吧

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
i=i++;与i=++i;是两种不同的概念,i=i++,是先把 i 的值赋给左边;而i=i++是i进行一次自家之后然后才赋值给左边。
回复 使用道具 举报
橸瑩膤漃寞林 发表于 2013-12-4 22:01
public class Test3 {
    public static void main(String[] args) {
    for(int i=3;i

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

i = ++i; 这行代码按一般人的理解都是没问题的
问题是i = i++;这代码的执行和我们平时想的有点不一样
回复 使用道具 举报
i=i++是先赋值i的初值也就是3,然后再进行自加1的操作
i=++i是先自加1得到结果4再进行赋值
回复 使用道具 举报
挖矿咯,大家一起挖矿咯,V5,黑马程序员
回复 使用道具 举报
++在后,先算结果,++在前,先自增在算结果
回复 使用道具 举报
李兴 中级黑马 2013-12-29 17:00:54
17#
i=i++为前自增,先把i的值3赋给前面,再执行加一操作,即是
  1. i=i;i=i+1;
复制代码

i=++i为后自增,先执行加一操作,再执行赋值操作,即使
  1. i=i+1;i=i;
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马