2009-07-27 4 views
3

BlackBerry Java Development, Best Practices에 다음 코드 샘플이 있습니다. 누군가 아래의 동일한 코드가 의미하는 바를 설명 할 수 있습니까? 코드 샘플에서이 점은 무엇입니까? 다른 문자열 버퍼를 추가하려면BlackBerry J2ME 효율적인 코딩 가이드 라인? 누군가 이걸 좀 더 자세히 설명해 줄 수 있을까요?

Avoiding StringBuffer.append (StringBuffer),이 BlackBerry® 자바 응용 프로그램 net.rim.device.api.util.StringUtilities.append(StringBuffer dst, StringBuffer src[, int offset, int length ]).

코드 샘플 그것은 의미

public synchronized StringBuffer append(Object obj) { 
    if (obj instanceof StringBuffer) { 
     StringBuffer sb = (StringBuffer)obj; 
     net.rim.device.api.util.StringUtilities.append(this, sb, 0, sb) 
     return this; 
    } 
    return append(String.valueOf(obj)); 
} 

답변

0

StringBuffer 클래스가 아님을 사용해야합니다 효율적으로 구현됩니다. Java String은 StringBuffer가 사용되는 String입니다. 그러나 StringBuffer.append()을 사용할 때 사용하는 StringBuffer 클래스는 효율적이지 않으므로 net.rim.device.api.util.StringUtilities을 사용해야합니다. 그 코드는 새로운 append() 메소드에서 그 클래스의 사용을 캡슐화하고있다.

0

StringBuffer는 다른 StringBuffer를 사용하는 append() 메서드에 오버로드를 제공하지 않습니다. 이는 개발자가 StringBuffer.append(String str)을 사용하고 두 번째 StringBuffer에서 .toString()을 호출 할 가능성이 있음을 의미합니다. 이것에 의해, 2 번째의 버퍼가 불변 인 캐릭터 라인으로 변환 해, 그 캐릭터 라인의 문자가 최초의 StringBuffer에 추가됩니다. 따라서 두 번째 버퍼의 모든 문자가 두 번 눌러지며 첫 번째 StringBuffer로 문자를 전송하기 위해 String을 불필요하게 할당합니다.

이렇게하는 효율적인 방법은 두 번째 버퍼의 각 문자를 첫 번째 버퍼의 끝으로 복사하는 것입니다. 그러나 StringBuffer는이를 수행하는 쉬운 방법을 제공하지 않습니다. 따라서 권장 사항은 두 번째 버퍼의 문자를 중간 컬렉션에 복사하지 않고 직접 읽을 수있는 StringUtilities.append (StringBuffer, StringBuffer)를 사용하는 것입니다.

이렇게하면 여분의 복제 런타임, 임시 문자열을 할당하는 데 필요한 런타임 및 임시 문자열을 할당하는 데 필요한 메모리가 절약됩니다.

관련 문제