2013-12-07 2 views
2

1.Есть ли разница между этими двумя кодами Java Snaps?

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); 
} 

Может кто-нибудь объяснить мне, если есть какая-то разница здесь? И какой метод лучше, если есть какая-то разница и почему?

ответ

2

StringBuffer является изменчивым классом. Метод setString2() принимает аргумент StringBuffer, изменяет его и также возвращает. Метод setString() принимает аргумент StringBuffer в качестве аргумента, модифицирует его, но не возвращает.

Обе программы выполняют одно и то же и производят одинаковый результат. Второе решение более чистое: нет причин возвращать то, что передается как аргумент. Действительно, у вызывающего уже есть ссылка на объект, который он передает в качестве аргумента, и возвращение этого объекта, таким образом, бесполезно и вызывает путаницу: почему метод возвращает StringBuffer? Является ли этот StringBuffer таким же, как тот, который передается как аргумент, или новый? Является ли StringBuffer переданным как измененный аргумент или метод возвращает измененную копию?

Второй способ не имеет всех этих двусмысленностей.

Сторона примечания: Вам больше не следует использовать StringBuffer. Предпочитают вместо этого StringBuilder.

+0

+1 JB Congrats для изготовления 200K :) –

+2

Спасибо @NandkumarTekale. Вы почти там: осталось только 192600 очков :) –

+0

Toooooo оптимистично :-P –

0
public static StringBuffer setString2(StringBuffer s) 
    { 
     s.append("::1st word"); 
     return s; 
    } 

Это выше метод, возвращая StringBuffer объект, который модифицирован методом добавления. Таким образом, в то время как вы делаете

System.out.println(setString2(sbGlobal)); 

Это возвращенное StringBuffer объект, который добавляется некоторыми String и что печать.

Где, как и во втором случае, нет типа возврата и его void.

public static void setString(StringBuffer s) 
    { 
     s.append("::1st word"); 
    } 

Так что утверждение

System.out.println(setString2(sbGlobal)); //compile error because of void 

Когда вы звоните

setString(sbGlobal); 

Это модифицирования StringBuffer объект и теперь вы печатаете sbGlobal объект

System.out.println(sbGlobal); 
Смежные вопросы