考虑以下代码:
long val = 0;
for(int i = 0; i < 2; val++)
val =+ ++i;
System.out.println(val);
val = 3
到底为什么呢?
我会这样计算:
val i
0 0 i < 2 = true;
0 0 ++i;
0 1 val =+ 1;
1 1 (end of for loop) val++;
2 1 i < 2 = true;
2 1 ++i;
2 2 val =+ 2;
4 2 (end of for loop) val++;
5 2 i < 2 = false;
Output: 5
但这是3。我不明白为什么在预先增加到val =+ ++i
时第二次不进行i = 1
增加i = 2
。
让我们首先关注看起来异常的行:
val =+ ++i;
此处的运算符是=
(分配),+
(一元加号)和++
(预递增)。没有=+
操作员。Java将其解释为两个运算符:=
和+
。添加适当的空格会更清楚:
val = + ++i;
现在让我们分析处理过程:
第一次迭代:val
和i
是0
。
i
预先增加到1
,这就是的结果++i
。一元+
不执行任何操作,1
而是分配给val
。然后出现迭代语句val++
,现在val
是2
。
i
仍然为1
,因此for
满足了循环条件并发生了第二次迭代。
第二次迭代:i
再次预先增加到2
。一元+
什么也不做,val
被分配2
。迭代语句val++
再次出现,现在是3
。但i
现在是2
,而且比不小于2
,这样的for
循环终止,并且val
-
3
-打印。
问题内容: 任何人都可以通过一些示例解释在Java中使用^运算符吗? 问题答案: 与大多数语言中的^相同,只是XOR。
问题内容: 有人可以向我解释为什么可以这样做: 没有操作符重载怎么办(在这种情况下为“ =“) 我来自C ++背景,因此可以解释… 问题答案: 在这种情况下,没有过载。与不同的Java片段是的定义-Java编译器将“”中的任何内容转换为,因此在您的示例中也是一个简单的赋值。在中,编译器将“”转换为,因此需要从转换为。
问题内容: 如何与大整数一起使用?喜欢 Eclipse表示未为BigInteger定义运算符%。 有任何想法吗? 问题答案: 像这样: 或者,正如用户Duncan在评论中建议的那样,我们可以像这样完全删除if语句:
问题内容: 几分钟前,我看到了这个问题,并决定查看java String类,以检查运算符是否有一些重载。 我什么也找不到,但我知道我可以做到 在哪里实施? 问题答案: 从精细手册中: Java语言为字符串连接运算符(+)以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过(或)类及其方法实现的。字符串转换是通过toString方法实现的,该方法由Object定义并由Java中的所有类继承。有
问题内容: 我知道将比较对象的值,’==’运算符将检查变量是否指向相同的内存。 我不了解如何比较对象的值,例如: 因此,如果使用,它将比较每个对象中的每个属性吗? 如果我们在谈论字符串呢?使用equals()和运算符“ ==”,我们是否仍然需要覆盖equals()? 问题答案: 不,如果您不覆盖类中的- method,则与相同。请参阅此文档: 类Object的equals方法在对象上实现了最有区别