程序1
public static void main(String[] args) {
int i=0;
i=i++;
System.out.println(i);
} 这个程序输出的是0。 程序2
public static void main(String[] args) {
int i=0;
i=i++ + ++i;
System.out.println(i);
}
这个程序输出的是2. 这两个程序为何会得出这样的结果。JAVA中自增操作符执行的时机是怎样的。为何程序1中的赋值语句会使i变成0
public static void main(String[] args) {
int i=0;
i=i++;
System.out.println(i);
} 这个程序输出的是0。 程序2
public static void main(String[] args) {
int i=0;
i=i++ + ++i;
System.out.println(i);
}
这个程序输出的是2. 这两个程序为何会得出这样的结果。JAVA中自增操作符执行的时机是怎样的。为何程序1中的赋值语句会使i变成0
解决方案 »
- 新人求解 ConcreteMediator类及其相关的类为什么在api找不到
- java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
- 定义一个雇员类?
- 请教:我的设计方式是这样的,但是有些困惑,希望给予点拨
- 如何读写串口
- 编译出这个问题又是怎么回事?
- 如何实现点击JDialog右上方的X时,出现YESNO选择对话框,当点击YES时关闭JDialog,点击NO时不关闭
- 用Socket开发过通信程序的高手请进!!!!!!巨难问题!!!
- 新手求助,编译时说不能解析字符是怎么回事?
- ConcurrentLinkedQueue和spring taskExecutor多线程发邮件问题
- jsp<a href>传值
- 如何判断输入的字符与数组内的字符一致?
(i++)的值是0
而(++i)的值是1
int i=0;
i=i++ + ++i;
System.out.println(i);
}
i=i++ + ++i;这个式子我给你一点一点变下
i=(i++) + (++i);
i=(0++) + (++1);
i=(0)+(++1);
i=(0)+(2);
i=2;
这样看能明白没
你第一个括号里 在i参与运算后已经+1变成了1,所以在第2个括号里是先要自增一在运算也就是1+1后再参与运算
程序2,那样的写法最好不要用,不同环境下会有不同的结果的,没什么意义。要清楚的话分开来写,反正我不会那样写,给自己找麻烦,呵呵。
++i是自加再取i的值
i=i++;即是将表达式(i++)的值赋给i,i++的值为0,进行此操作后,i的值为1
而i=i++ + ++i 先(i++)的值为0,但是i的值变为1,接着 ++i, 前缀是现将i加1,在将值赋给表达式,即(++i)为2,即i=0+2; 故答案为2
int a = 0;
int i = 1;
a = i++ ;其中i++ 是一表达式相当于i = i+1,如果你取的是表达式的值,
那就是i+1;如果你要用的是变量i那,就是i的原值
int i=0;
System.out.println(i/1 + i++);和int i=0;
System.out.println(i++ + i/1);
++i 相当于 i = i + 1;return i;
i++ 相当于 temp = i; i = i + 1;return temp;
应该引用第三方,把 i=i++; 理解成 int k = i++; i = k 这样你就非常容易理解了。