我在《简明的书》中遇到了java中的这一行代码,我想知道编译器是如何划分这些代码的
a[i++] += 2;
a[i++] = a[i++] + 2;
如果左侧操作数是数组访问表达式(§15.10.3),可能包含在一对或多对括号中,则:
首先,计算左侧操作数数组访问表达式的数组引用子表达式。如果此求值突然完成,则赋值表达式也会因为同样的原因突然完成;未计算(左侧操作数数组访问表达式的)索引子表达式和右侧操作数,也未进行赋值。
否则,计算左侧操作数组访问表达式的索引子表达式。如果此求值突然完成,则赋值表达式由于相同的原因突然完成,右侧操作数不会求值,也不会发生赋值。
https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.26.1
我假设评估的顺序应该如下
a[i++] = a[i++] + 2;
^ ^ ^
1 3 2
----------
^
4
------
^
5
--------------------
^
6
我们可以通过运行这个片段来证明这一点
int[] a = {0, 10, 0, 0};
int i = 0;
a[i++] = a[i++] + 2;
System.out.println(Arrays.toString(a)); // [12, 10, 0, 0]
System.out.println(i); // 2
问题内容: 以下Java程序平均需要0.50秒至0.55秒的时间运行: 如果我替换为,则需要0.60到0.65秒的时间来运行。怎么会? 我对该程序的每个版本运行了15次,两次交替运行。结果如下: 最快的运行时间比最慢的运行时间长。如果它们具有相同的效率,则发生这种情况的可能性将小于。 问题答案: 字节码的顺序略有不同。 : vs : 乍看之下,这没有什么区别;如果有的话,第二个版本更理想,因为它减
i元素表示有别于常规文字的文本,具有不同的语态或语气,用于分类名称、技术术语、外语里的惯用语、翻译的散文、西方文字中的船舶名称等。 如果 i元素中的文本,与主要文本使用不同的语言,则要使用 lang属性进行注明。如: <p>The <i class="taxonomy">Felis silvestris catus</i> is cute.</p> <p>The term <i>prose co
最近我与一家软件公司进行了一次面试,在技术能力方面,我问到了以下问题: 以这样一种方式声明i,即条件始终为真: 在java中,技术上是否可以分配这种类型的东西??
本文向大家介绍给出以下代码,输出的结果是什么?原因? for(var i=0;i<5;i++) { setTimeout(function(){ console.log(i); },1000); } console.log(i)相关面试题,主要包含被问及给出以下代码,输出的结果是什么?原因? for(var i=0;i<5;i++) { setTimeout(function(){ console
我想做到这一点: 我该怎么做?我想在那里得到变量名,但它将是不起作用的东西(字符串整数)的组合,而不是变量名
本文向大家介绍求结果 [ i % 2 for i in range(10) ]:相关面试题,主要包含被问及求结果 [ i % 2 for i in range(10) ]:时的应答技巧和注意事项,需要的朋友参考一下