Java 将值赋给局部变量而不是直接返回值的结果有什么好处吗?
我正在进行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
首先有一个警告,表示未使用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++调试器中,这个构造可以让你在//这里设置sb的更多代码
意味着类似于的东西,我不是在这里编写整个代码,但是请注意,在这个方法中使用了'bs',并且在它的末尾有一个值
您可以只返回'代码>也是,但这显然不是重点。能够检查值是我为什么经常使用var res=calculation;返回res代码>样式。我希望优化器(任何语言)将为var res=calculation生成相同的代码;返回res代码>vs.回报计算在编写注释之后,我意识到至少对于(预移动语义)C++,具有赋值和返回成本,没有周期需要对类的复制构造函数和赋值操作符的编写者进行一些关心。在Java中,除string之外的其他类也可能出现这种情况。
return strBuilder.toString();