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

是否首先评估数组索引或赋值?

南门焱
2023-03-14
问题内容

如果我有以下代码:

array[index] = someValue;

请问someValueindex会首先评估?


问题答案:

首先评估索引。请参阅JLS第15.26.1节,尤其是:

15.26.1。 简单赋值运算符=

如果左侧操作数是数组访问表达式(第15.13节),可能包含在一对或多对括号中,则:

1.
首先,评估左侧操作数数组访问表达式的数组引用子表达式。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;(左操作数数组访问表达式的)索引子表达式和右操作数不求值,并且不发生赋值。

2.
否则,将评估左侧操作数数组访问表达式的index子表达式。如果该评估突然完成,则由于相同的原因,赋值表达式会突然完成,并且不会评估右侧操作数并且不会发生赋值。

  1. 否则,将评估右侧操作数。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成,并且不会发生赋值。

TL; DR :顺序为 1 [2] = 3



 类似资料:
  • 问题内容: 我正在慢慢尝试理解numpy中s和s之间的区别,以及可变与不可变类型之间的区别。 如果我使用“高级索引”访问数组的一部分,则应该返回一个副本。这似乎是真的: 由于仅是副本,因此它不会共享数据,更改它也不会突变。但是,这让我感到困惑: 因此,看来,即使我使用高级索引,分配也仍然会将左侧的内容视为视图。显然,第2行与第6行是相同的对象/数据,因为变异对其没有影响。 所以我的问题是:第8行中

  • 我正在尝试使用以下cmdlet测试Powershell中是否存在DNS区域: 这很好,但我现在需要做的是根据是否有错误或是否有数据返回,将它转换为真/假评估。 例如,这是一个真实的场景: 而这是一个错误的场景: 我正在纠结的是如何对此进行评估?通俗地说,我需要检查是否有实际数据。 非常感谢!

  • 问题内容: 我知道Java在这种情况下具有智能/惰性评估: 但是关于: 即使返回true 也被调用? 问题答案: 在Java(和其他类似C的语言)中,这称为 短路评估 。* 是的,在第二个示例中总是被调用。也就是说,除非编译器/ JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。 两者截然不同; 前者本质上是一种优化技术,而第二种则

  • 问题内容: 以下内容在Python 3.6中从不打印任何内容 相反,它只是坐在那里烧坏了CPU。问题似乎在于,如果迭代器位于无限空间内,则永远不会返回迭代器,因为它首先评估完整的迭代器。鉴于假设应该是发电机,这令人惊讶。 我本来希望这会开始计数(到无穷大),就像这个生成器的行为(直接从docs取得): 但是,尽管我的生成器立即开始计数,但使用的生成器根本不计数。 其他工具可以达到我的期望。例如,以

  • 问题内容: 我想知道JavaScript是否具有C#中的&&运算符之类的“短路”评估。如果没有,我想知道是否有一种合理的解决方法可以采用。 问题答案: 是的,JavaScript具有“短路”评估。

  • 问题内容: 给出以下代码: 如果返回,php解释器是否还会检查以后的条件,例如? 如果是这样,那么为什么它在不需要时会做额外的工作呢? 问题答案: 是的,PHP解释器是“惰性”的,这意味着它将尽可能少地进行比较以评估条件。 如果要验证,请尝试以下操作: