Java 将值赋给局部变量而不是直接返回值的结果有什么好处吗?

Java 将值赋给局部变量而不是直接返回值的结果有什么好处吗?,java,string,stringbuilder,Java,String,Stringbuilder,我正在进行java代码检查。下面是一个函数(代码段): 首先有一个警告,表示未使用res的值。第二,我不理解回报。为什么它们不返回(strBuilder.toString())。有什么好处吗?res没有使用,所以没有理由这样返回。您可以删除它: String getValue() { StringBuilder bs = new StringBuilder(); // // More code here that sets sb return bs.to

我正在进行java代码检查。下面是一个函数(代码段):


首先有一个警告,表示未使用res的值。第二,我不理解回报。为什么它们不
返回(strBuilder.toString())
。有什么好处吗?

res
没有使用,所以没有理由这样返回。您可以删除它:

String getValue() {
     StringBuilder bs = new StringBuilder();
     //
     // More code here that sets sb

     return bs.toString();
}

你完全正确;分配给
res
没有意义<代码>返回bs.toString()也会这样做



不忽略编译器警告的p.S.+1

这种代码有时可能是由于不完全删除调试工件而导致的:

String getValue() {

     String res;
     StringBuilder bs = new StringBuilder();
     //
     // More code here that sets sb

     res = bs.toString();
     // Test and/or display res here
     return res; 
}

它显然是下一轮重构和清理的一个很好的候选者。

也可以写成:

String getValue() {
    return new StringBuilder().toString();
}
只是猜测,但是一些(大多数?)IDE不允许您直接检查函数返回的值。使用此方案,您可以在方法末尾放置断点,然后将鼠标悬停在“res”上以获取返回值。

您也不能这样做

String res = strBuilder.toString();
return res ;
或者直接,

return strBuilder.toString();
现在,如果您想知道您所问的好处,我总是希望直接返回。我个人的逻辑很简单

  • 你要少写一行代码!!!(到处声明变量对我来说不是一种好感觉,而且你也不必考虑变量的名称、冲突等……这些愚蠢的事情)
  • 该值将不会存储在内存中,并等待
    GC
    收集该值。因此,内存越少,请参见
  • 快速写入变量,然后从中读取并返回。。。。。更多的读/写,不是吗

这些东西没什么大不了的,我不得不像你问的那样说

因为
res
没有被使用,你是对的,没有理由那样返回。只要
返回bs.toString()
就可以了。字符串getValue()应该作为代码的一部分列出,但我无法使格式正常工作。对不起,没有。可以安全地删除
res
变量。这不仅会返回
字符串
,而且会首先将其分配给
字符串
。我看不出这有什么好处。有什么理论可以解释为什么它一开始会这样写吗?我猜有人用字符串生成器替换了“res”的许多字符串附件进行优化,但没有完全完成任务。@MartinSmith说实话,我不知道。。。Alan的理论很好,但谁知道开发人员在编写此代码时在想什么呢?:)@MartinSmith,我不知道Java调试器,但是在我熟悉的C++调试器中,这个构造可以让你在 RES上设置一个监视点,这样你就可以在返回之前检查<代码> BS.toStReg()/<代码>的值。@ java java调试器能够查看StringBuilder内部的内容,所以它不是(有效的)原因。我认为,
//这里设置sb的更多代码
意味着类似于
的东西,我不是在这里编写整个代码,但是请注意,在这个方法中使用了'bs',并且在它的末尾有一个值
您可以只
返回'也是,但这显然不是重点。能够检查值是我为什么经常使用
var res=calculation;返回res样式。我希望优化器(任何语言)将为
var res=calculation生成相同的代码;返回resvs.回报计算return strBuilder.toString();