当前位置: 首页 > 面试题库 >

= + Java中的运算符

楚知
2023-03-14
问题内容

考虑以下代码

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;

现在让我们分析处理过程:

第一次迭代:vali0
i预先增加到1,这就是的结果++i。一元+不执行任何操作,1而是分配给val。然后出现迭代语句val++,现在val2
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方法在对象上实现了最有区别