使用变量进行输入处理的性能?

时间:2017-07-28 21:50:59

标签: java optimization

要在使用之前检查字符串输入,我经常使用第一个块中显示的代码。第二个块也是一样的,但性能有差异吗? (例如,文本字段是否在第一个代码块中读取了两次?)还有一个被认为是错误的编码或者我可以同时使用它们吗?

if (!textField.getText().equals("")) {
    name = textField.getText();
}

String ipt = textField.getText();
if (!ipt.equals("")) {
    name = ipt;

2 个答案:

答案 0 :(得分:1)

在性能方面,第二种方法更快,因为它可以避免重复处理 但这是一个如此便宜的任务,你应该执行它数百万次看到差异。
此外,现代JVM执行许多优化。这两种情况都可能导致类似的表现。

但是在这两种方式中,我注意到了难闻的气味:

这样:

if (!textField.getText().equals("")) {
    name = textField.getText();
}

引入重复 一般情况下,我们通常没有被修改,好像我们忘记改变副本,无论我们在哪里引入问题 复制一行代码通常不是一个严重的问题,但通常文本字段不是单一的。所以你很可能为多个文本字段执行此任务。复制成为一个问题。

这样:

String ipt = textField.getText();
if (!ipt.equals("")) {
    name = ipt;

引入了一个范围比所需范围更广的局部变量。我们也不鼓励使代码不易出错,因为我们可能会在处理需要的时候重用变量而我们不应该这样做。
根据您的要求,我不喜欢这两种解决方案。

更好的质量和效率方法将引入一种方法:

private String getValueOrDefault(TextField textField, String defaultValue) {
  String value = textField.getText();
  return !value.equals("") ? value : defaultValue;
}

您可以这样调用它:

name = getValueOrDefault(textField, name);

您不再拥有超出其要求的变量,也不会有重复。

答案 1 :(得分:0)

第二个可能更快。那是因为第一个调用getText()两次。第二个只存储一次,然后可以访问。但是,由于它是在变量中定义的,因此它可能是相同的。这可能是最快的方法:

if (!(String value=textField.getText().equals(""))
name = value;
编辑:正如评论中有人所说,上述情况并不快。对不起答案,我没有通过计时器运行它。