1.
public static StringBuffer setString2(StringBuffer s)
{
s.append("::1st word");
return s;
}
static StringBuffer sbGlobal = new StringBuffer("before");
public static void main(String[] args)
{
System.out.println(setString2(sbGlobal));
}
2.
public static void setString(StringBuffer s)
{
s.append("::1st word");
}
static StringBuffer sbGlobal = new StringBuffer("before");
public static void main(String[] args)
{
setString(sbGlobal);
System.out.println(sbGlobal);
}
谁能向我解释一下这里有什么区别吗?还有哪种方法更好,是否有任何差异,为什么?
最佳答案
StringBuffer
是一个可变类。 setString2()
方法采用 StringBuffer
作为参数,修改它并返回它。 setString()
方法采用 StringBuffer
作为参数,修改它,但不返回它。
两个程序执行相同的操作并产生相同的结果。不过,第二个解决方案更干净:没有理由返回作为参数传递的内容。事实上,调用者已经拥有对其作为参数传递的对象的引用,因此返回该对象是无用的,并且会导致困惑:为什么该方法返回 StringBuffer?这个 StringBuffer 与作为参数传递的 StringBuffer 相同,还是一个新的? StringBuffer 是作为修改后的参数传递的,还是该方法返回它的修改后的副本?
第二种方法没有所有这些歧义。
旁注:您不应该再使用StringBuffer
。更喜欢 StringBuilder
。
关于java - 这两个Java代码Snaps有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438957/