use*_*851 4 java performance if-statement memory-efficient
我想知道,技术上最有效的方法是什么.
什么会更聪明的代码:
if (args[0].toLowerCase().toString().equals("server")) {
System.out.println("SERVER");
}
Run Code Online (Sandbox Code Playgroud)
要么:
String host = args[0].toLowerCase();
if (host.equals("server")) {
System.out.println("SERVER");
}
Run Code Online (Sandbox Code Playgroud)
请记住,我知道这个变量是多余的.而且一个参数也可以包含一个数字,但这不是我的问题.这只是一个例子.
什么时候应该为if语句创建变量?总是?它更安全吗?我不应该这样做,因为我在浪费记忆吗?它会影响性能吗?
acd*_*ior 10
无论如何,创建变量.像这样的单个变量永远不会成为性能瓶颈.
总是喜欢可读性.性能问题通常只出现在系统的特定部分.当它们出现时,而不是在测量它们(也就是有数字)之前,你会逐个对待它们.永远不要忘记:过早优化是万恶之源.
在您的具体情况下,您可以更进一步,创建另一个变量,解释比较的意图:
String host = args[0].toLowerCase();
boolean isRunningUnderProduction = host.equals("server");
if (isRunningUnderProduction) {
System.out.println("SERVER");
}
Run Code Online (Sandbox Code Playgroud)
比评论好多了.并在一瞥中解释了代码的意图.
Martin Fowler的重构书引用:
关于性能的有趣之处在于,如果分析大多数程序,您会发现它们大部分时间都浪费在代码的一小部分上.如果您平等地优化所有代码,最终会浪费90%的优化,因为您正在优化运行不多的代码.快速完成程序所花费的时间,由于缺乏清晰度而浪费的时间,都是浪费时间.
换句话说:如果你的程序更容易阅读,那么当时机到来时(如果它来了),它们更容易修复缓慢的部分.
这种记忆影响可以忽略不计,风格和可读性更为重要.
我使用的规则是不为它创建一个变量,除非它将它全部嵌入if语句中,或者如果我打算稍后再次使用它(可能在if语句中),它将无法读取.我发现单个使用变量让我觉得它可能在以后使用并试图避免它们.