매일 6 개의 자바 초보 입문 면접 문제,자유 로 운 길 로 가 는 다음날
String 의 소스 코드 를 보 는 과정 에서 String 내부 의 실제 저장 구 조 는
char
배열 이 고 String 에서 몇 가지 중요 한 구조 함수 가 있 음 을 알 수 있 습 니 다.
//
public String() {
this.value = "".value;
}
// String
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
// char[]
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
// StringBuffer
public String(StringBuffer buffer) {
synchronized(buffer) {
this.value = Arrays.copyOf(buffer.getValue(), buffer.length());
}
}
// StringBuilder
public String(StringBuilder builder) {
this.value = Arrays.copyOf(builder.getValue(), builder.length());
}
한편,String 류 에서 우리 가 흔히 볼 수 있 는 방법 은 equals
방법 으로 두 문자열 이 같은 지 비교 하 는 데 사용 된다.이것 은 사실 Object 류 의 equals 방법 을 다시 썼 습 니 다.구체 적 인 비교 과정 은 다음 과 같 습 니 다.
public boolean equals(Object anObject) {
// true
if (this == anObject) {
return true;
}
// String , false
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
// char
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
//
while (n-- != 0) {
// true false,
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
String 클래스 에 도 equals()와 유사 한 방법 이 있 습 니 다.equals Ignorecase()는 문자열 의 대소 문 자 를 무시 한 후에 문자열 을 비교 하 는 데 사 용 됩 니 다.물론 String 클래스 에 도 우리 가 흔히 사용 하 는 방법 이 많 습 니 다.
compareTo()
:두 문자열 비교 indexOf():
검색 문자열 이 처음으로 나타 난 아래 표 시 된 위치 lastIndexOf():
검색 문자열 이 마지막 으로 나타 난 아래 표 시 된 위치 contains():
검색 문자열 에 다른 문자열 이 포함 되 어 있 는 지 여부 toLowerCase():
문자열 을 모두 소문 자 toUpperCase():
문자열 을 모두 대문자 length():
검색 문자열 의 길이 trim():
문자열 의 맨 끝 빈 칸 을 제거 합 니 다 replace():
대체 문자열 의 일부 문자 split():
문자열 을 분할 하고 문자열 배열 join():
문자열 배열 을 문자열 이것들 은 모두 우리 가 실제 응용 에서 사용 할 수 있 는 방법 이다.
2.==equals 와 의 차이
String 에서 흔히 볼 수 있 는 생 성 방식 은 두 가지 가 있 습 니 다.new String()방식 과 직접 값 을 부여 하 는 방식 입 니 다.
간단하게 테스트 해 봅 시다.
public static void main(String[] args) {
String s1 = "nz";
String s2 = new String("nz");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
}
4.JVM 이 실 행 될 때 데이터 영역 이나 메모리 구 조 를 말씀 해 주 시 겠 습 니까?
우 리 는 스 레 드 의 개인 과 스 레 드 가 공유 하 는 두 가지 상황 으로 나 눌 수 있다.
스 레 드 개인:프로그램 카운터,로 컬 방법 스 택,가상 컴퓨터 스 택
스 레 드 공유:쌓 기 및 방법 영역
5.클래스 로 딩 과정
시스템 에서 Class 형식 파일 을 불 러 오 는 주요 절 차 는 C>연결 C>초기 화 입 니 다.연결 은 인증 C>준비 C>분석 으로 나 눌 수 있 습 니 다.
임의의 클래스 에 대해 서 는 클래스 로 더 를 불 러 오 는 것 과 이 클래스 자체 가 JVM 에서 의 유일 성 을 확립 해 야 합 니 다.모든 클래스 로 더 는 독립 된 클래스 이름 공간 이 있 습 니 다.클래스 로 더 는 지 정 된 모든 한정 이름 에 따라 class 파일 을 JVM 메모리 에 불 러 온 다음 class 대상 으로 전환 하 는 것 입 니 다.
주로 네 종류의 로 더 가 있 습 니 다.
BootstrapClassLoader
)는 자바 핵심 라 이브 러 리 를 불 러 오 는 데 사용 되 며 자바 프로그램 에서 직접 참조 할 수 없습니다.ExtensionClassLoader
):자바 의 확장 라 이브 러 리 를 불 러 옵 니 다.자바 가상 컴퓨터 의 구현 은 확장 라 이브 러 리 디 렉 터 리 를 제공 합 니 다.이 종류의 로 더 는 이 디 렉 터 리 에서 자바 류 를 찾 아 불 러 옵 니 다.ApplicationClassLoader
):자바 응용 클래스 경로(CLASSPATH)에 따라 자바 류 를 불 러 옵 니 다.일반적으로 자바 응용 종 류 는 로 딩 을 완료 합 니 다.ClassLoader.getSystemClassLoader()
을 통 해 얻 을 수 있 습 니 다.일반적으로 사용자 정의 클래스 로 더 가 없 으 면 기본적으로 이 로 더 를 사용 합 니 다.java.lang.ClassLoader
클래스 를 계승 하 는 방식 으로 이 루어 질 수 있 습 니 다.한편,하나의 클래스 로 딩 과정 에서 하나의 클래스 로 딩 요청 을 받 았 을 때 이 클래스 를 직접 불 러 오지 않 고 이 요청 을 자신의 부모 클래스 로 딩 에 위임 합 니 다.맨 위 에 있 는 시작 클래스 로 딩 이 완료 되 지 않 을 때 만 부모 로 딩 이 완료 되 지 않 을 때 만 이 로 딩 요청 을 수행 할 수 있 습 니 다.클래스 를 불 러 오 려 고 시도 합 니 다.이런 모델 은 바로 부모 위임 모델 이다.이런 모델 의 장점 은 유형 을 차원 적 으로 구분 하고 안전 도 보장 할 수 있다.
총결산
이 글 은 여기까지 입 니 다.만약 이 글 이 당신 에 게 도 도움 이 된다 면,당신 은 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.