我有两个相同的条件,我想知道哪些表现良好?
if(str_final.charAt(str_final.length() -1) == 'a'
|| str_final.charAt(str_final.length() -1) == 'b' )
{
// body
}
-------------------- OR --------------------
char temp = str_final.charAt(str_final.length() -1);
if( temp == 'a' || temp == 'b')
{
// body
}
答案 0 :(得分:2)
第二个版本是微小的更快。
<强>原因:强>
2方法调用较少(如果它不以'a'结尾)
但两者都不会超过return variable;
:
charAt()
只是对数组的访问权,length()
也已预先计算。答案 1 :(得分:1)
第二个代码是更好的选项,因为str_final.charAt(str_final.length() - 1)在最坏的情况下也只执行一次。
char temp = str_final.charAt(str_final.length() -1);
if( temp == 'a' || temp == 'b')
{
// body
}
在另一种情况下,str_final.charAt(str_final.length() - 1)必须执行两次。
答案 2 :(得分:1)
它可能是相同的性能,因为优化编译器(或者只是及时编译器/热点)可以在编译时将第一个版本更改为第二个版本。
答案 3 :(得分:1)
我会选择第二个选项,因为它更容易阅读。此外,str_final.length()
和str_final.charAt()
只会被调用一次。
此外,不要调用字符temp
,而是将其称为更有意义的内容,例如lastChar
。
如果要检查的字符数不止两个,您甚至可以考虑使用switch语句:
char lastChar = str_final.charAt(str_final.length() -1);
switch (lastChar) {
case 'a':
case 'b':
//do something
break;
case 'c':
//something else
break;
case 'd':
//something else
break;
}
答案 4 :(得分:0)
第二段代码更快,因为.charAt
和.length()
仅评估一次。正如其他人指出的那样,可读性显然更为重要,这也有利于第二种解决方案。
答案 5 :(得分:0)
这是一个问题吗?我当然更喜欢第二种结构,因为它更具可读性,而且可能性能更好。
编译器可以轻松地优化临时变量,但无法确定函数调用是否具有副作用。因此,双功能调用无法针对单个调用进行优化。
答案 6 :(得分:0)
第二个不能慢,所以我想我会说第二个,因为它至少避免了方法调用。但是,JIT将内联这一点。除非这是一个非常紧凑的循环,否则性能差异几乎可以忽略不计。
我个人觉得 second 也更具可读性(也许你可以调用变量而不是'temp')。所以我会基于这些理由投票。但这是我认为更好的问题:哪个更清楚?当你有任何理由相信这是代码很重要时担心性能。
答案 7 :(得分:0)
第二个选项会更快,也更易读,但使用“temp”
之外的其他名称会更好答案 8 :(得分:0)
第二版更好,虽然它的性能比第一版小,但它也有几个优点 1.可读性 2.维护 - 对于这种类型的代码,假设您必须检查更多条件(比如10),然后更改逻辑,只需一个地方。