2014-12-23 4 views
1

생성자 안에 StringBuffer/StringBuilder를 사용하여 새 객체를 만들 때 임시 변수를 만들어 초기화 된 클래스 변수에 전달해야하는 것 같습니다. 즉, 새 인스턴스를 만들 때 생성자에서 Number (아래 예)로 변경 한 내용이 임시 변수를 사용하지 않는 한 객체 변수의 값에 영향을 미치지 않습니다. 예를 들어 :Java 생성자 내의 StringBuffer?

public class Some_class { 

    public static class algorithm{ 
    String sNumber = ""; 

    algorithm(String num){ 
     String temp = new StringBuilder(num).reverse().toString(); 
     sNumber = temp; 

     //the below expression does not work: 
     //sNumber = new StringBuilder(num).reverse().toString(); 
    } 

는 나는 새의 StringBuilder라는 이름 때문에/StringBuffer와 같은 이름을 반대하는 것이,이 sNumber 변수를 초기화 이전의 값을 대체 할 가정 -하지만 그렇지 않다. 이것을 할 수있는 적절한 방법이 있습니까?

+6

주석을 달았습니다 코드 절대적으로 잘 작동합니다. 문제를 시연하는 짧지 만 완전한 프로그램을 보여주세요. 그렇게하기 위해 더 이상 문제가되지 않는다는 것을 강하게 의심합니다 (예 : 이전에 잘못 진단했거나 다른 곳에서 문제를 발견 한 것). –

+1

혹시 정말로'String sNumber = new StringBuilder (num) .reverse(). toString();'라고했을까요? – ajb

+0

너희들 모두 정확하다, 특히 @ajb. 내 작업 공간에서'String sNumber = new StringBuilder (num) .reverse(). toString();'이라고 쓰고 왜 작동하지 않는지 알 수 없었습니다. 내가 여기 왔을 때, 나는 그걸 올바른 방법으로 썼고 그것이 틀렸다고 생각했다. – Eyeofpie

답변

3

난 당신이 StringBuilder에 동일한 이름과 같은 이름을 경우 나는 새의 StringBuilder라는 이름 때문에/StringBuffer와 같은 이름을 오브젝트 것을, 그것은,

없음 변수를 이전에 초기화 sNumber의 값을 대체 할 것이라고 가정 필드는 필드를 숨 깁니다. (필드에 액세스 할 수있는 유일한 방법은 다음 this.sNumber을 통해 것입니다.) 다음과 같이

당신은 임시 변수없이 해결할 수 :

sNumber = new StringBuilder(num).reverse().toString(); 

(당신은이 작동하지 않습니다 귀하의 질문에 말을하지만, 그것은 단지 당신이 생성자에서 지역 변수로 sNumber 선언하지 않았는지 확인하십시오. 여전히 작동하지 않으면 질문에 오류 메시지를 포함해야합니다.)