控制机制的决定(条件的必要性?)

时间:2013-08-10 03:28:56

标签: java android if-statement

假设我有一个包含以下值的个人资料页面:姓名,姓氏,用户名,关注者和以下计数。

用户登录我的应用程序后可能会更新它们。所以有一个刷新按钮。当用户单击刷新按钮时,我正在调用Web服务以获取新值。作为回报,我得到5个值。

以下是示例:

假设我已调用Web服务并将返回值解析为response类。

// Here is first approach.

if (!response.name.equals(name)) {
 name = response.name;
}

if (!response.lastname.equals(lastname)) {
 lastname = response.lastname;
}


// Here is second.

name = response.name;
lastname = response.lastname;

在第一种方法中,我认为if条件是必需的,因为如果它们的值相同,我将不会浪费分配操作的时间。而且我们也知道if条件是计算机最快的操作。

在第二种方法中,我认为不需要if条件,因为我已经在if条件(nameresponse.name)中访问了这两个值,而不是浪费时间访问它们,不要认为它们是相同的。只是做作业。

现在,我想知道更快的方法是什么?

提前致谢。

3 个答案:

答案 0 :(得分:2)

第二种方法更可取......除非您错误地使用'=='在代码 1 中的其他位置比较这些字符串。

你理由中的缺陷就在这里:

  

“在第一种方法中,我相信如果需要条件,因为如果它们的值相同,我不会因为分配操作而浪费时间。”

实际上,赋值运算符可能比if测试更快,甚至忽略了进行String.equals调用的成本。赋值只是复制对存储单元的引用,这非常便宜 2 。这不是你应该想到的“优化”的东西,除非你有明确的剖析证据证明它是一个瓶颈。


1 - 在这种情况下,两种方法之间实际上可能存在语义差异。但很有可能 方法都不会给你正确的答案。

2 - 在某些情况下,对一个对象字段的赋值可能比单个内存写入要贵一点......但即使这样,也不应该尝试优先进行优化。

答案 1 :(得分:1)

  

更多的计算罪是以效率的名义提出的(没有   必须实现它)比任何其他单一原因 - 包括   盲目的愚蠢。 -William A. Wulf

也就是说,Java的String.equals()通过比较长度然后比较每个字符来工作。

if (!response.name.equals(name)) {
 name = response.name;
}

涉及字符串比较和可能的分配。

name = response.name; 

总是涉及作业。

理论上情况2应该快于1.但是有很多因素会影响这两者的相对表现。

答案 2 :(得分:1)

如果你还没有证明这是一个瓶颈,那么你在其他地方的时间会更好。

话虽如此,检查一个字符串等于另一个字符串可能比赋值本身更昂贵。根据经验,这是我的猜测。

哪个过程更有效还取决于名称彼此不相等的频率。如果它们经常不相等,那么检查相等性肯定会减慢你的代码。

如果您真的担心,我建议为此创建基准,但请允许我重申,我觉得您的担忧是错误的。

过早优化会使代码的可读性降低,浪费时间。