자바 에서 String 클래스 를 계승 할 수 있 는 지, 스스로 StringUtils 를 쓸 수 있 는 지

3709 단어

면접 문제: 자바 에서 String 클래스 를 계승 하여 스스로 StringUtils 를 쓸 수 있 습 니까?왜?StringUtils 도구 클래스 를 어떻게 쓰 는 지
정 답: 안 됩 니 다. String 류 는 final 수정자 가 있 기 때문에 final 수식 류 는 계승 할 수 없습니다. 디 테 일 은 변경 할 수 없습니다.
public final class String implements java.io.Serializable, Comparable, CharSequence




final , 。 String


프로그램 컨 텍스트 환경 에 따라 자바 키워드 final 은 '이것 은 바 꿀 수 없 는 것' 이나 '최종 적 인' 의 미 를 가지 고 비 추상 적 인 유형, 비 추상 적 인 구성원 방법 과 변 수 를 수식 할 수 있 습 니 다.디자인 이나 효율 이라는 두 가지 이해 때문에 변 화 를 막 아야 할 수도 있다. final 클래스 는 계승 할 수 없습니다. 하위 클래스 가 없 으 면 final 클래스 의 방법 은 기본적으로 final 입 니 다. final 방법 은 하위 클래스 의 방법 으로 덮어 쓸 수 없 지만 계승 할 수 있 습 니 다. final 구성원 변 수 는 상수 입 니 다. 한 번 만 할당 할 수 있 고 할당 후 값 은 변 하지 않 습 니 다. final 은 구조 방법 을 수식 하 는 데 사용 할 수 없다. 메모: 부모 클래스 의 private 구성원 방법 은 하위 클래스 에 덮어 쓸 수 없 기 때문에 private 형식의 방법 은 기본적으로 final 형식 입 니 다.
하위 클래스 가 어떤 방법 을 덮어 쓰 는 것 을 허용 하지 않 는 다 면 이 방법 을 final 방법 으로 설명 할 수 있 습 니 다. final 방법 을 사용 하 는 이 유 는 두 가지 가 있 습 니 다. 첫째, 방법 을 잠 그 고 모든 계승 류 가 그 의 미 를 수정 하고 실현 하 는 것 을 방지한다. 둘째, 효율 적 이다.컴 파 일 러 는 final 방법 을 호출 할 때 내장 메커니즘 으로 전환 되 어 실행 효율 을 크게 높 인 다.
"final 방법 을 사용 하 는 이 유 는 두 가지 가 있 습 니 다. 첫 번 째 이 유 는 상속 류 가 그 의 미 를 수정 하지 않도록 잠 그 는 것 입 니 다. 두 번 째 이 유 는 효율 입 니 다. 초기 자바 구현 버 전에 서 final 방법 을 내장 호출 로 바 꿉 니 다. 그러나 방법 이 너무 크 면 내장 호출 에 따 른 성능 향상 이 보이 지 않 습 니 다. 최근 자바 버 전에 서 는 필요 하지 않 습 니 다.이런 것들 을 파이 널 방법 으로 최적화 했다 "고 말 했다.
 
2. String 클래스 에 대하 여
참고 글: 자바 의 더미, 스 택, 상수 탱크 자바 더미, 스 택, 상수 탱크 및 String 에 대한 상세 한 설명 (고전 중의 고전) 문자열 상수 탱크 란 무엇 입 니까? 자바 의 String 은 왜 가 변 적 이지 않 습 니까? - String 소스 분석
String 류 에 대해 서 는 상수 탱크 의 개념 을 알 아야 합 니 다.
String s = new String(“xyz”);  //       

 
정 답: 1 개 또는 2 개, "xyz"가 상수 탱크 에 존재 한다 면 더미 에 "xyz"대상 의 복사 본 만 만 만 듭 니 다. 그렇지 않 으 면 상수 탱크 에 하나의 복사 본 을 만들어 야 합 니 다.
String s = "a"+"b"+"c"+"d"; //       

 
정 답: 이것 은 JVM 구현 과 관련 이 있 습 니 다. 상수 탱크 가 비어 있 으 면 1 개 일 수도 있 고 7 개 일 수도 있 습 니 다.
3. 관련 유형: StringBuffer, StringBuilder
참고 글: String, StringBuffer 와 StringBuilder 의 차이 String StringBuilder StringBuffer 를 비교 해서 잘 정 리 했 습 니 다. 원본 코드 의 측면 에서 자바 의 StringBuffer, StringBuilder, String 의 문자열 조합 에 대해 이야기 합 니 다.
String 은 immutable 로 변경 할 수 없습니다. String 대상 이 누 적 될 때마다 StringBuilder 대상 을 만 들 고 효율 이 낮 습 니 다.
//             s1 "ab",JVM    ,      
String s1 = "a" + "b";  

 
//     ,JVM      StringBuilder,     append        ,     
//                    StringBuilder StringBuffer 
String s1 = "a";
String s2 = "b"; 
String s3 = s1 + s2; //     String s3 = (new StringBuilder(s1)).append(s2).toString();

 
StringBuffer 는 라인 이 안전 합 니 다. StringBuilder (5.0 버 전 후 추 가 된 클래스, StringBuffer 의 간단 한 교체) 는 비 스 레 드 가 안전 하지만 효율 이 좋 습 니 다. 단일 스 레 드 환경 에서 많은 문자열 을 추가 할 때 이 종 류 를 사용 하 는 것 을 추천 합 니 다.
 
 

다음으로 전송:https://www.cnblogs.com/gzu-link-pyu/p/8543877.html

좋은 웹페이지 즐겨찾기