2017-10-12 4 views
0

여기서 6 행과 8 행의 차이점은 무엇입니까? 둘 다 동일한 문자열을 출력합니다. 왜 StringBuilder를 사용하여 toString을 사용해야합니까?왜 우리는 stringbuilder와 함께 toString 메서드를 사용해야합니까?

 StringBuilder s = new StringBuilder("hello");//line1 
    System.out.println(s);//line2 
    s.append("hi");//line3 
    System.out.println(s); 
    s.append("okk"); 
    System.out.println(s);//line 6 
    s.toString(); 
    System.out.println(s);//line 8 
+2

마지막 행이 쓸모가 없다면, 문자열에 다시 할당해야합니다. 기본적으로 6 행과 8 행은 똑같이하고 있습니다. 이론을 테스트하려면 System.out.println (s.ToString())을 수행하십시오. println 함수는 두 가지 경우 모두 당신을 위해 그것을하기 때문에 기본적으로 println은 문자열 뒤에있는 문자열 작성기의 값을 받아서 인쇄합니다. –

답변

4

이 객체의 toString() 메소드를 호출 string.valueOf(Object) 8

PrintStream.println(Object) 전화 라인 6 라인 사이에 다른 아무것도 없다, 그리고 인쇄됩니다. (s 후자는 예외가 발생하는 경우 null, 아닌 경우)

System.out.println(s)System.out.println(s.toString())과 동일한 출력을 갖는다.

s.toString()을 직접 호출하는 이유는 string을 기대하는 다른 코드로 전달할 수 있도록 으로 StringBuilder의 현재 "빌드 된"값을 얻는 것입니다. 호출 할 코드가 StringBuilder이면 s을 전달할 수 있지만 호출 된 코드는 값을 수정할 수 있습니다 (불변의 데이터 형식이기 때문에 string을 사용할 수 없습니다).

0

System.out.println은 char 배열 (line6) 을 인쇄 할 수 있습니다. s.toString()은 실제로 stringbuilder 내용을 문자열에 배치하는 데 사용됩니다. 귀하의 코드에서 문자열 변수로 설정하지 않으므로 아무 것도 일어나지 않을 것입니다 ... 그래서 line8에서 문자열 배열은 문자열 작성기의 내용에서 다시 인쇄됩니다.

을 추가하는 경우 문자열 str = s.toString(); System.out.println (str);

문자열은 stringbuilder에서 만든 문자열 변수를 인쇄합니다.

+0

줄 6은 문자 배열을 인쇄하지 않습니다. 그것의 toString 메서드를 호출하여 개체를 인쇄합니다. – bartonjs

+0

네, 저의 머리 속에 그걸 가지고 있었고, 그 다음에는 그 기억을 환기시킬 글을 읽었습니다. 나는 네가 대답하기를 너무 바랬다. 내 것이 낫다. – Micktommyord