我想知道,从技术上讲,什么是最有效的方法。
用
写代码会更聪明吗? if (args[0].toLowerCase().toString().equals("server")) {
System.out.println("SERVER");
}
或:
String host = args[0].toLowerCase();
if (host.equals("server")) {
System.out.println("SERVER");
}
请记住,我知道这个变量是多余的。一个参数也可以包含一个数字,但我的问题不是这样的。这只是一个例子。
什么时候应该为if语句创建变量?总是?它更安全吗?难道我不该这样做,因为我在浪费记忆吗?它会影响性能吗?
无论如何,创建这个变量。像这样的单个变量永远不会成为性能瓶颈,永远不会。
总是有利于可读性。性能问题通常只出现在系统的特定部分。当它们出现时,而不是在测量它们之前(也就是有数字),你要逐个处理它们。永远不要忘记:过早优化是万恶之源。
在您的特定情况下,您甚至可以更进一步,创建另一个变量,解释比较的意图:
String host = args[0].toLowerCase();
boolean isRunningUnderProduction = host.equals("server");
if (isRunningUnderProduction) {
System.out.println("SERVER");
}
比注释好多了。并解释了代码的意图。
引自Martin Fowler的重构书:
关于性能的有趣的事情是,如果你分析大多数程序中,您会发现它们将大部分时间浪费在中代码的一小部分。如果你平等地优化所有的代码,你最终会90%的优化都被浪费了,因为你是优化不经常运行的代码。制作节目所花费的时间快,因为不够清晰而损失的时间,都是浪费的时间。
换句话说:如果你的程序更容易阅读,当时间到来时,它们更容易修复慢的部分(如果来了)。
这对内存的影响可以忽略不计,样式和可读性更重要。
我使用的规则是不为它创建变量,除非它将使它在if语句中嵌套,或者如果我计划稍后再次使用它(可能在if语句中)。我发现单次使用的变量让我认为它可能是以后使用的,并试图避免它们。如果编译器是聪明的,他不会太在意你把它放在一行或分开。
这段代码有它的结构,因为它对人类来说很容易阅读。
更重要的部分是可读性和代码的"干净"程度,想象你有更多的if:
public void doSomething(){
if (args[0].toLowerCase().toString().equals("server")) {
System.out.println("SERVER");
}
}
public void doSomethingElse(){
if (args[0].toLowerCase().toString().equals("server")) {
System.out.println("SERVER");
}
(...)
public void doEvenMoreStuff(){
if (args[0].toLowerCase().toString().equals("server")) {
System.out.println("SERVER");
}
}
如果都是一样的,但是如果你必须改变什么呢?也许是字符串"server"
,您必须遍历整个代码并更改每一个出现-并确保找到每一个!所以有变量更容易,有些东西会改变->你只需要在一个地方改变东西:
String objectToSearchFor = "server";
String output = "Server found";
if (args[0].toLowerCase().toString().equals(objectToSearchFor)) {
System.out.println(output);
}
}
(...)
public void doEvenMoreStuff(){
if (args[0].toLowerCase().toString().equals(objectToSearchFor)) {
System.out.println(output);
}
}
这是更安全的维护,将有助于发现错误,因为它更容易阅读。