자바 의 toString()방법 인 스 턴 스 코드
toString()방법 은 모두 가 사용 한 것 이 라 고 믿 습 니 다.일반적으로 대상 의 관련 데 이 터 를 문자열 로 되 돌려 줍 니 다.
최근 항목 에 Array List
처리 요 구 는 집합 데 이 터 를 문자열 형식 으로 변환 합 니 다.형식 은 하위 집합 1 데이터+"\#"+하위 집합 2 데이터+"\#"+...+부분 집합 n 데이터 입 니 다.
예:집합 데이터:[1,2,3],[2,3,5]] '[1,2,3]\#[2,3,5]'형식의 문자열 로 전환 해 야 합 니 다.
첫 번 째 는 이렇게 처리 했다.
ArrayList<ArrayList<Object>> a = new ArrayList<>(); // [[1,2],[2,3]] [1,2]#[2,3]
for (int i = 0; i < 2; i++) {
ArrayList<Object> c = new ArrayList<>();
c.add(i+1);
c.add(i+2);
a.add(c);
//
Log.i("myinfo",c.toString());
}
StringBuilder builder = new StringBuilder();
builder.append(a.get(0).toString()+"#"+a.get(1).toString());
//
Log.i("myinfo",builder.toString());
그리고 처리 할 로그 로 그 를 보십시오:05-12 10:29:18.485 9565-9565/com.xxx.aaa I/myinfo: [1, 2]
05-12 10:29:18.485 9565-9565/com.xxx.aaa I/myinfo: [2, 3]
05-12 10:29:18.495 9565-9565/com.xxx.aaa I/myinfo: [1, 2]#[2, 3]
우리 가 원 하 는 것 은[1,2]\#[2,3]형식의 문자열 이지 만 결 과 는[1,2]\#[2,3]이다. ,두 번 째 값 이 뒤로 가기 시작 하 자 앞 에 빈 칸 이 하나 더 생 겼 다.
다음은 집합 한.toString()방법의 원본 코드 를 살 펴 보 겠 습 니 다.
공식 설명
1.이 Collection 클래스(Set 과 List 의 부모 클래스)의 문자열 표현 형식 을 되 돌려 줍 니 다.
2.이 표현 형식 은 규정된 형식 이 있 는데 사각형 괄호'[]'에 포함 된다.
3.안에 있 는 하위 요소 가","(쉼표 와 빈 칸)분할(이것 이 중점 입 니 다)
/**
* Returns the string representation of this {@code Collection}. The presentation
* has a specific format. It is enclosed by square brackets ("[]"). Elements
* are separated by ', ' (comma and space).
*
* @return the string representation of this {@code Collection}.
*/
@Override
public String toString() {
if (isEmpty()) {
return "[]";
}
StringBuilder buffer = new StringBuilder(size() * 16);
buffer.append('[');
Iterator<?> it = iterator();
while (it.hasNext()) {
Object next = it.next();
if (next != this) {
buffer.append(next);
} else {
buffer.append("(this Collection)");
}
if (it.hasNext()) {
buffer.append(", ");
}
}
buffer.append(']');
return buffer.toString();
}
이 Collection 아래 의.toString()방법 소스 코드 를 분석 하여 몇 부분 으로 나 눕 니 다.1.집합 이 비어 있 는 지 판단(empty),즉 집합 안에 데이터 가 있 는 지 판단 합 니 다.빈 값(데이터 없 음)이 라면 문자열'[]'을 되 돌려 줍 니 다.
2.집합 이 빈 값 이 아니라면 데이터 가 있 음 을 나타 낸다.
① 다음 하위 요소(Object next=it.next()를 반복 해서 가 져 옵 니 다.이 하위 요소 가 집합 자체 라면 StringBuffer 클래스 의 buffer 대상 에"(this Collection)"을 추가 합 니 다.
②、이 하위 요소 가 집합 자체 가 아니라면 buffer 대상 에 추가
③、이 하위 요소 아래 에 하위 요소 가 있 으 면"buffer 대상 에 추가 하여 인접 한 하위 요 소 를 분할 하 는 데 사용 합 니 다.
3.StringBuffer.toString()문자열 을 되 돌려 줍 니 다.
이 를 통 해 알 수 있 듯 이 반환[1,2]\#[2,3]은 공식 적 으로 정확 한 반환 형식 이다.그러면 이 문제 에 대해 소스 코드 를 바 꿀 수 없 는 상황 에서 얻 은 문자열 뒤에'replace All'(',')을 사용한다.문자열 의 빈 칸 을 모두 제거 합 니 다.
메모:원본 코드 에 코드 가 있 습 니 다:
if (next != this) {
buffer.append(next);
} else {
buffer.append("(this Collection)");
}
여기 서 일부 학생 들 이 이해 하지 못 할 수도 있 습 니 다.여기 서 예 를 들 어 위의 그것 입 니까?우 리 는 서브 집합 에 코드 c.add(c)를 추가 합 니 다.집합 자 체 를 집합 에 추가 하여 인쇄 결 과 를 보 세 요.
ArrayList<ArrayList<Object>> a = new ArrayList<>();
for (int i = 0; i < 2; i++) {
ArrayList<Object> c = new ArrayList<>();
c.add(i+1);
c.add(i+2);
c.add(c);
//
Log.i("myinfo",c.toString());
}
로그 결과 의 빨간색 부분 을 보 세 요.알 아 보 셨 나 요?집합 에 있 는 하위 요소 가 집합 자체 라면'(this Collection)'을 집합 으로 되 돌려 줍 니 다.05-12 10:58:00.615 8424-8424/com.maiji.magkarepatient I/myinfo: [1, 2, (this Collection)]
05-12 10:58:00.615 8424-8424/com.maiji.magkarepatient I/myinfo: [2, 3, (this Collection)]
이로써 위의 이 문 제 는 해결 되 었 습 니 다.다음은 다른 종류의'toString()소스 코드 를 보 겠 습 니 다.
개체
/**
* Returns a string containing a concise, human-readable description of this
* object. Subclasses are encouraged to override this method and provide an
* implementation that takes into account the object's type and data. The
* default implementation is equivalent to the following expression:
* <pre>
* getClass().getName() + '@' + Integer.toHexString(hashCode())</pre>
* <p>See <a href="{@docRoot}reference/java/lang/Object.html#writing_toString">Writing a useful
* {@code toString} method</a>
* if you intend implementing your own {@code toString} method.
*
* @return a printable representation of this object.
*/
public String toString() {
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
공식 설명1.이 Object 에 대한 간단명료 하고 읽 을 수 있 는 문자열 을 되 돌려 줍 니 다.
2.Object 류 의 하위 클래스 는 이 방법 을 재 작성 하여 대상 을 설명 하 는 유형 과 데 이 터 를 제공 하도록 격려 합 니 다.
3.기본 적 인 실행 형식 은 아래 의 이 예 와 일치 합 니 다.
getClass().getName() + '@' + Integer.toHexString(hashCode())</pre>
요약:클래스 에.toString()방법 을 다시 쓰 지 않 았 을 때 루트 Object 의 이.toString()방법 을 실행 합 니 다.반환 형식:대상 의 클래스 이름+@+해시 값 의 16 진수
getClass().getName()
hashCode()
Integer.toHexString(hashCode()) 16
예:
Object d = new Object();
Log.i("myinfo",d.toString());
05-12 11:23:00.758 17406-17406/com.maiji.magkarepatient I/myinfo: java.lang.Object@e23e786 2.String,StringBuilder,StringBuffer
세 가 지 는 모두 문자열 의 표현 형식 이지 만 차이 가 있다.
①、String.toString() , 직접 돌아 가기
/**
* Returns this string.
*/
@Override
public String toString() {
return this;
}
②、StringBuilder공식 설명:이 builder 대상 의 내용 을 문자열 로 되 돌려 줍 니 다.
/**
* Returns the contents of this builder.
*
* @return the string representation of the data in this builder.
*/
@Override
public String toString() {
/* Note: This method is required to workaround a compiler bug
* in the RI javac (at least in 1.5.0_06) that will generate a
* reference to the non-public AbstractStringBuilder if we don't
* override it here.
*/
return super.toString();
}
슈퍼.toString()으로 거 슬러 올 라 가 실현
/**
* Returns the current String representation.
*
* @return a String containing the characters in this instance.
*/
@Override
public String toString() {
if (count == 0) {
return "";
}
return StringFactory.newStringFromChars(0, count, value);
}
③、StringBuffer
@Override
public synchronized String toString() {
return super.toString();
}
슈퍼.toString()으로 거 슬러 올 라 가기
/**
* Returns the current String representation.
*
* @return a String containing the characters in this instance.
*/
@Override
public String toString() {
if (count == 0) {
return "";
}
return StringFactory.newStringFromChars(0, count, value);
}
종합해 보면 StringBuffer 와 StringBuilder 는 결국 부모 급 을 호출 한 것 으로 나 타 났 다. “AbstractString Builder"의 toString()방법그러나 그들 자체 의 toString()은 다르다.우 리 는 이 를 통 해 정리 할 수 있다.
1.StringBuilder:스 레 드 가 안전 하지 않 습 니 다.
StringBuffer:스 레 드 가 안전 합 니 다.
2.StringBuilder 처리 속도 가 StringBudiler 보다 훨씬 빠르다
3.단일 스 레 드 대량의 데이터 조작,StringBuilder 사용 ,StringBuilder 속도 가 빠 르 기 때문에 단일 스 레 드 때문에 안전성 을 고려 하지 않 습 니 다.
다 중 스 레 드 대량 데이터 조작,StringBuffer 사용 , StringBuffer 가 안전 하 니까.
지도
원본 코드 먼저 보기:
되 돌아 오 는 형식 은{key 1=value 1,key 2=value 2}입 니 다.
주의 하 다. 1.맵 집합 에 데이터 가 없 을 때 되 돌아 오기{}
2.두 개의 데 이 터 를 사용 하기 전에","분할,Collection 과 일치 하 며 하나의 쉼표,하나의 빈 칸"을 사용 합 니 다.
3.키 값 이 집합 자체 일 때 추가 (this Map)
public String toString() {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (! i.hasNext())
return "{}";
StringBuilder sb = new StringBuilder();
sb.append('{');
for (;;) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
sb.append(key == this ? "(this Map)" : key);
sb.append('=');
sb.append(value == this ? "(this Map)" : value);
if (! i.hasNext())
return sb.append('}').toString();
sb.append(',').append(' ');
}
}
예:
Map<String,String> map = new HashMap<>();
map.put("keyA","valueA");
map.put("keyB","valueB");
map.put("keyC","valueC");
Log.i("myinfo",map.toString());
인쇄 결과:
05-12 11:41:30.898 4490-4490/com.maiji.magkarepatient I/myinfo: {keyA=valueA, keyB=valueB, keyC=valueC}
위 에서 말 한 것 은 소 편 이 소개 한 자바 의 toString()방법 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.