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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gao5867565 中级黑马   /  2016-10-15 10:23  /  1398 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[Java] 纯文本查看 复制代码
class test{
	public static void main(String[] agrs) {
		int i = 1;
		i = i ++;
		System.out.print(i);
	}
}

这段代码最后得出的结果是 1 ,为什么?有没有对java运行机制比较了解的大神回答一下???

17 个回复

倒序浏览
你这个问题,还没入门
回复 使用道具 举报
同问,我也不会了……
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
结果怎么会是1?
回复 使用道具 举报
很简单,把a++当作一个整体,经过a++,a的值变为2,a++这个整体对外表现值为1,将1赋给a,最后a就等于1了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
当++在变量后面,先参与运算,再自增.
也就是说
             i  =  i  ++;  
右边的i先把1赋值给左边的i. 然后右边的i再进行自增,为2.但是打印出来是已经被赋值了的左边的i.
eg:class Test120 {
        public static void main(String[] args) {
                int a = 1;               
                int b;
                b = a++;                              //a赋值给b,b = 1,a++==2
                System.out.print(b);
        }
}
回复 使用道具 举报
回复 使用道具 举报
好蓝瘦{:2_30:}
回复 使用道具 举报
这个问题是个坑,表达式i++的值是几,i就是几
回复 使用道具 举报
class test{
    public static void main(String[] agrs) {
        int i = 1;
        int j = i++;
        i = j;
        System.out.print(i);
    }
}

这个代码与你提供的代码是等价的,对比着理解就懂了。
回复 使用道具 举报
打印的是赋值后 左边的i值
回复 使用道具 举报
gyy 中级黑马 2016-10-20 01:22:49
12#
http://soft.chinabyte.com/database/279/11431779.shtml给你转一篇博客你就知道了,是编译器的问题
回复 使用道具 举报
我是这样记的:i在前面,i先算,所以先把i原来的值临时存下来,然后i再自增,最后赋值给左边的值是原来临时存储的值
回复 使用道具 举报
冷猫 中级黑马 2016-10-20 20:44:22
14#
我的理解是++在前面就先自增再赋值,++在后面是先赋值后自增.
回复 使用道具 举报
都这样了!!!
回复 使用道具 举报
i = i ++;
++在后面   就等这个语句前面的操作完毕后再进化++  也就是先赋值在自增  虽然自增了 但是没有再继续赋值 所有只记录了1
回复 使用道具 举报
度半de阳光 发表于 2016-10-15 14:00
当++在变量后面,先参与运算,再自增.
也就是说
             i  =  i  ++;  

正解,我们刚学完
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
++运算符在变量的后面并且和赋值运算符 = 一起做运算,先把1赋值给了等号左边的变量i,然后自身在自增一,所以打出来的是1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马