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

?中的Map.get()优化:三元运算符

东方化
2023-03-14
问题内容

考虑以下代码:

java.util.Map<String, String> map = new java.util.HashMap<String, String>();
...
String key = "A";
String value = map.get(key) == null? "DEFAULT_VALUE" : map.get(key); // (1)

编译器 优化生产线(1)类似于:

String tmp = map.get(key);
String value = tmp == null? "DEFAULT_VALUE" : tmp;

(或者:

String value = map.get(key);
if(value == null) value = "DEFAULT_VALUE";

)?


问题答案:

不知道您是否要问哪个对应于编译器将对原始表达式进行的处理,在这种情况下,答案是:

都不-

示例中,您两次调用map.get();编译器无法知道没有副作用,因此在找到值时它将调用两次。

可能最接近

String tmp = map.get(key);
String value;
if (tmp == null)
    value= "DEFAULT_VALUE";
else
    value = map.get(key);

或者,如果您要问哪种选择最有效,那么答案是:

第二种选择可能会稍好一些,因为它不需要其他局部变量。附加的局部变量对JVM造成了轻微的开销,但是一旦JIT通过它,它在运行时可能就没有任何意义。



 类似资料:
  • 问题内容: 我似乎无法与三元运算符结合使用此代码的第一部分(+ =)。 我认为这段代码的工作方式如下: 但这是不正确的,因为这会导致控制台出现错误。 所以我的问题是我应该如何正确插入此代码? 问题答案: h.className = h.className + (h.className ? ‘ error’ : ‘error’) 您希望操作员为之工作,最好对此有所具体。 当然,不应有任何伤害 ,但这

  • 我需要将值设置为取决于条件的值。 使用 CoffeeScript 执行此操作的最短方法是什么? E、 g.这是我在JavaScript中的做法:

  • 据我所知,PowerShell似乎没有一个针对所谓三元运算符的内置表达式。 例如,在支持三元运算符的C语言中,我可以编写如下内容: 如果PowerShell中并不存在这种情况,那么实现相同结果的最佳方法(即易于阅读和维护)是什么呢?

  • 模板可以支持三元运算符,如: {$status?'发布':'下线'} {$vo.status?'发布':'下线'} {$vo['status']?'发布':'下线'} 支持条件判断表达式: {$a==$b ? 'yes' : 'no'} 条件运算符可以是==、===、!=、!==、>=、<=

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1802

  • 模板可以支持三元运算符,如: {$status?'发布':'下线'} {$vo.status?'发布':'下线'} {$vo['status']?'发布':'下线'} 支持条件判断表达式: {$a==$b ? 'yes' : 'no'} 条件运算符可以是==、===、!=、!==、>=、<=