Java의 String 객체 데이터 유형 전체 분석
String s0="kvill";
String s1="kvill";
String s2="kv" + "ill";
System.out.println( s0==s1 );
System.out.println( s0==s2 );
결과는:true true입니다. 우선, 자바는 문자열 상수가 복사본이 하나밖에 없다는 것을 알아야 합니다.예에서 s0과 s1의'kvill'은 모두 문자열 상수이기 때문에 컴파일러에서 확정되었기 때문에 s0==s1은true이다.한편,'kv'와'ill'도 모두 문자열 상량이다. 한 문자열이 여러 문자열 상량으로 연결되면 그 자체도 문자열 상량이기 때문에 s2도 컴파일러에 하나의 문자열 상량으로 해석되기 때문에 s2도 상량 탱크에서'kvill'의 인용이다.그래서 우리는 s0==s1=s2를 얻는다.new String () 로 만든 문자열은 상수가 아닙니다. 컴파일러에서 확인할 수 없기 때문에 new String () 으로 만든 문자열은 상수 탱크에 넣지 않습니다. 주소 공간이 있습니다.예2:.결과:falsefalsefalse예2에서 s0은 상량지에서'kvill'의 응용이고 s1은 컴파일러에서 확정할 수 없기 때문에 실행할 때 만든 새로운 대상인'kvill'의 인용입니다. s2는 후반부 newString('ill')이 있기 때문에 컴파일러에서 확정할 수 없기 때문에 새로운 창설 대상인'kvill'의 응용이기도 합니다.그걸 알면 왜 이 결과가 나왔는지 알 수 있다.4. String.intern (): 추가 설명: 존재합니다.class 파일의 상수 풀은 실행 중 JVM에 로드되고 확장됩니다.String의 intern () 방법은 상량 탱크를 확충하는 방법이다.String 실례str가 intern () 방법을 호출할 때, 자바는 상수 탱크에 같은 Unicode의 문자열 상수가 있는지 찾고, 있으면 인용을 되돌려주고, 없으면 상수 탱크에 Unicode가str와 같은 문자열을 추가해서 인용을 되돌려줍니다.예3을 보면 알 수 있다. 예3:
String s0="kvill";
String s1=new String("kvill");
String s2="kv" + new String("ill");
System.out.println( s0==s1 );
System.out.println( s0==s2 );
System.out.println( s1==s2 );
결과:false********false//s1을 실행했지만intern (), 그러나 반환 값은 s1true//설명 s1에 부여되지 않았습니다.intern () 이 되돌아오는 것은 상량 탱크의 "kvill"인용true입니다. 마지막으로 잘못된 이해를 풀었습니다."String.intern () 방법을 사용하면 String 클래스를 전역 String 테이블에 저장할 수 있습니다. 같은 값을 가진 Unicode 문자열이 이 테이블에 있다면, 이 방법은 테이블에 있는 문자열의 주소를 되돌려줍니다. 테이블에 같은 값의 문자열이 없으면 자신의 주소를 테이블에 등록합니다."라고 그가 말한 전역 String 테이블을 상량 탱크로 이해하면 그의 마지막 문장은"테이블에 같은 값의 문자열이 없으면 자신의 주소를 테이블에 등록합니다."는 잘못된 것입니다: 예 4:
String s0= "kvill";
String s1=new String("kvill");
String s2=new String("kvill");
System.out.println( s0==s1 );
System.out.println( "**********" );
s1.intern();
s2=s2.intern(); // "kvill" s2
System.out.println( s0==s1);
System.out.println( s0==s1.intern() );
System.out.println( s0==s2 );
결과:false kvill kvill true는 이 클래스에서 우리는'kvill'상량이라는 이름이 없기 때문에 상량 탱크에는 처음에는'kvill'이 없습니다. 우리가 s1을 호출할 때.intern () 이후 상량 탱크에'kvill'상량을 추가했습니다. 원래의 상량 탱크에 없는'kvill'은 여전히 존재합니다.'자신의 주소를 상량 탱크에 등록하는 것'도 아닙니다.s1==s1.intern ()은false로 원래의'kvill'이 여전히 존재한다는 것을 설명한다.s2는 현재 상량 탱크의 "kvill"주소이기 때문에 s2==s1이 있습니다.intern () 은true입니다.5. equals () 와 ==: 이것은 String에 대해 간단하게 말하면 두 문자열의 유니코드 서열이 맞는지 비교하는 것입니다. 만약true를 되돌려준다면.= = 는 두 문자열의 주소가 같은지, 즉 같은 문자열의 인용인지 비교합니다.6. String은 변하지 않는다는 말은 또 많이 해야 한다. 여러분은 String의 실례가 생성되면 변하지 않는다는 것을 알기만 하면 된다. 예를 들어 Stringstr='kv'+'ill'+'+'ans'.바로 4개의 문자열 상수가 있다. 우선'kv'와'ill'은'kvill'을 생성하여 메모리에 존재하고'kvill'과''kvill'을 생성하여 메모리에 존재하고 마지막으로'kvillans'를 생성한다.그리고 이 문자열의 주소를str에 부여했습니다. 바로 String의'변하지 않음'에 많은 임시 변수가 생겼기 때문입니다. 이것이 바로 StringBuffer를 사용하는 것을 권장하는 이유입니다. 왜냐하면 StringBuffer는 변경할 수 있기 때문입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access Request, Session and Application in Struts2If we want to use request, Session and application in JSP, what should we do? We can obtain Map type objects such as Req...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.