int i = 0;
i = i++;
System.out.println(i);
输出: 0
问题:执行i=i++;这句后,左i=0,右i=1,那编译器怎样决定输出的是哪个i? 还是我这样理解有错误?请教大家了!
i = i++;
System.out.println(i);
输出: 0
问题:执行i=i++;这句后,左i=0,右i=1,那编译器怎样决定输出的是哪个i? 还是我这样理解有错误?请教大家了!
解决方案 »
- Socket编程的疑问
- Java如何调用C++写的dll?
- 关于扩充Applet的权限的问题,这个问题有人研究过么?
- 有关于对话框的问题
- 我的配置为什么老出现Exception in thread "main" java.lang.NoClassDefFoundError: test
- JTable的问题:如何自动滚动到选中的那一行
- 如何把一个无符号整形数复制到一个四字节的byte数组中去?
- Java初学:当要导入一个或多个Java类时。。。。
- 哪里有 jdbc for oracle8i 下载
- ScrollPane中的控件大小调整时,如何使ScrollPane也动态调整??
- 关于调用静态成员变量
- CSV文件乱码问题
句序列:
int tmp = i;
i = i + 1;
i = tmp;
建议:
不要在单个的表达式中对相同的变量赋值超过一次。
对相同的变量进行多次赋值的表达式会产生混淆,并且很少能够产生你希望的行
为。
java解惑的内容,楼主可以去找找这本书
左i=0,右i=0
i=++i;后
两边都是1了
0: iconst_0 //把常数0入栈
1: istore_1 //本地常量赋值 0出栈
2: iload_1 //加载本地变量值 0又被入栈
3: iinc 1, 1 //本地变量自加1,但是不会入栈
6: istore_1 //0出栈赋给0
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1 //加载本地变量值 为0
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return
楼主的这种写法对程序效率方面起不到任何作用,相反会降低程序的可读性。如果我手下的程序员出现这种写法,我会立即叫他改过来,否则请你另谋高就
i=++i;//是先加了1再赋值
i=++i;先自增1,再赋值楼主那样的写法确实没有多大的可读性
就如同:String a="aa";
String b=a;
a="dddddddd";把a输出:a="dddddddd"
把b输出:b="aa"。但是C语言输出是
把a输出:a="dddddddd"
把b输出:b="dddddddd"。道理基本一样。
如果把java的机制的机制改变了,肯定也可以
i=0;
i=i++;
这是i肯定也是1
另外,这是SUN公司2006年10月的一道面试题
int temp=i;
i=i+1;
return temp;
}
i=++i;//是先加了1再赋值还不明白,就没办法啦~