关于java的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 21:44:47
public class Test
{
public static void main(String args[])
{
int i = 1;
int j = i++;
if((i == (++j)) & ((i++) == j))
{
i+=j++;
}
System.out.println(i);
}
}
我不明白为什么等于5?

int i = 1;
i=1
int j = i++;
i=2 j=2 这里面i++ 会使i的值变为2
a=(i == (++j))
i=2 j=2
这一句i和j的值都没有发生变化,而左边为2 右边为3 得到的值为 false
b=((i++) == j)
i=3 j=2
i的值变为3 左边为 3 右边为2 得到的值为 false

c=(a & b)
a=false b=false
false 与 false 相与等于 true ,这就是所谓的负负得正。

i+=j++
这句最难理解,它并不等于
i+= (j++)
而是相当于
i+=j;
j++;
因此i现在的值为3+2=5 j现在的值为3
要理解这一句,需要了解 操作符的左结合性和右结合性。

你应该先理解一下a++与++a的区别
比如
a=1
b=a++
这时b=1 a=2
a++是在负了值之后再自加
而++a是先自加在付值

所以
int i = 1;...............................//i=1
int j = i++;.............................//j=1 i=2
if((i == (++j)) & ((i++) == j))..........//(i==(++j))与((i++)==j)为真 并且 i=3 j=2
{
i+=j++;..................................// i=i+(j++) i=3+2=5 然后 j=3
}

public class Test {
public static void main(String args[