자바 의 불 가 변 클래스 와 String 의 불 가 변 메커니즘
4282 단어 Java
가 변 하지 않 는 클래스 는 이러한 인 스 턴 스 를 만 든 후 이 인 스 턴 스 변 수 는 변경 할 수 없다 는 뜻 입 니 다.
자바 가 제공 하 는 8 개의 포장 류 와 자바. lang. string 류 는 모두 변 할 수 없 는 클래스 입 니 다. 인 스 턴 스 를 만 든 후 인 스 턴 스 변 수 는 변 할 수 없습니다.
사용자 정의 불 가 변 클래스 를 만 들 려 면 다음 규칙 을 만족 시 켜 야 합 니 다.
String 대상 의 불변성
string 대상 은 메모리 생 성 후 변경 할 수 없습니다. 변경 할 수 없 는 대상 의 생 성 은 일반적으로 상기 5 가지 원칙 을 만족 시 킵 니 다. String 코드 가 어떻게 실현 되 는 지 봅 시다.
public final class String
implements java.io.Serializable, Comparable, CharSequence
{
/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;
/** Cache the hash code for the string */
private int hash; // Default to 0
....
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length); // deep copy
}
...
public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
}
...
}
이전 절 에서 분석 하면 String 데 이 터 는 가 변 류 가 아 닙 니 다. 그러면 이러한 특성 을 설정 하면 어떤 장점 이 있 습 니까?나 는 다음 과 같은 몇 가지 로 요약 한다.
2. 라인 안전 고려.같은 문자열 인 스 턴 스 는 여러 스 레 드 에서 공유 할 수 있 습 니 다.이렇게 하면 스 레 드 안전 문제 로 동기 화 를 사용 하지 않 아 도 된다.문자열 자체 가 라인 이 안전 합 니 다.
주의해 야 할 것 은 String 대상 이 정말 가 변 적 이지 않 은 것 이 아니 라 우 리 는 반사 체 제 를 통 해 가 변 적 이지 않 은 대상 을 수정 할 수 있다 는 것 이다.코드 예 는 다음 과 같 습 니 다.
// "Hello World", s
String s = "Hello World";
System.out.println("s = " + s); //Hello World
// String value
Field valueFieldOfString = String.class.getDeclaredField("value");
// value
valueFieldOfString.setAccessible(true);
// s value
char[] value = (char[]) valueFieldOfString.get(s);
// value 5
value[5] = '_';
System.out.println("s = " + s); //Hello_World
출력: s = Hello World s = HelloWorld
부분http://www.cnblogs.com/jaylon/p/5721571.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.