String internal() 방법

3466 단어 String

public String intern()은 문자열 객체의 정규화된 표현 형식을 반환합니다.클래스 String이 개인적으로 관리하는 비어 있는 문자열 풀인터넷 방법을 호출할 때, 만약 풀에 이 String 대상과 같은 문자열이 포함되어 있다면, (이 대상은 equals (Object) 방법으로 확정됨) 풀의 문자열을 되돌려줍니다.그렇지 않으면 이 String 객체를 풀에 추가하고 이 String 객체의 참조를 반환합니다.이것은 두 문자열의 s와 t를 따른다. s.equals (t) 가true일 때만 s.intern () = t.intern () 이true이다.모든 문자열과 문자열 값 상수 표현식은 내부적입니다.문자열 면 값은 Java Language Specification의§3.10.5에 정의되어 있습니다.되돌아오기: 문자열의 내용은 이 문자열과 같지만, 문자열 탱크에서 오는 것을 보장합니다.
 
 
package section13_3;

public class StringMethod {
	public static void main(String[] args) {
		String str = "abc";
		String str1 = new String("abc");
		System.out.println(str.equals(str1));	//true
		System.out.println(str == str1);		//false
		
		String str2 = "qq";
		String str3 = new String("qq").intern();
		System.out.println(str2.equals(str3));	//true
		System.out.println(str2 == str3);		//true
		
		String str4 = "lancelot";
		String str5 = new String("lancelot");
		System.out.println(str4.equals(str5));	//true
		System.out.println(str4 == str5);		//false
		// intern() str5
		str5.intern();
		System.out.println(str4.equals(str5));	//true
		System.out.println(str4 == str5);		//false
		
		String str6 = new String("zyp");
		String str7 = new String("zyp");
		
		// , false
//		str7 = str7.intern();	
		System.out.println(str6 == str7);		//false
		System.out.println(str6.equals(str7));	//true
	}
}


 
 
괜찮은 글:http://bbs.csdn.net/topics/190153906
 
 
String.intern(); 존재class 파일의 상수 탱크입니다. 실행 중 jvm에 불러오고 확장할 수 있습니다.String의 인터넷 () 방법은 상수도를 확충하는 방법이다.String 실례str가 인터넷 () 방법을 호출할 때, 자바는 상수 탱크에 같은 유니버설 문자열의 상수가 있는지 찾고, 없으면 인용을 되돌려줍니다. 그렇지 않으면 상수 탱크에 유니버설과str의 문자열을 추가하고 인용을 되돌려줍니다.
 
예3:
String s0=”kvill”;
String s1=new String(“kvill”);
String s2=new String(“kvill”);
System.out.println(s0==s1);
S1.intern();
S2=s2.intern();
System.out.println(s0==s1);
System.out.prntln(s0==s1.intern());
System.out.println(s0==s2);

결과: False False//s1이 수행되었지만intern (), 그러나 반환 값이 s1 True True에 부여되지 않았습니다. 마지막으로 잘못된 이해를 깨뜨렸습니다."String.intern () 방법을 사용하면 하나의 String 클래스를 전역 String 테이블에 저장할 수 있습니다. 같은 값을 가진 유니버설 문자열이 이 테이블에 이미 있다면, 이 방법은 테이블에 있는 문자열의 주소를 되돌려주고, 테이블에 같은 값의 문자열이 없으면 자신의 주소를 테이블에 등록합니다."이 전역 String 테이블을 상량으로 이해하면마지막으로'표에 같은 값의 문자열이 없으면 자신의 주소를 표에 등록한다'는 말은 틀렸다.
예4:
String s1=new String(“kvill”);
String s2=s1.intern();
System.out.println(s1==s1.intern());
System.out.println(s1+” ”+s2);
System.out.println(s2==s1.intern());

결과:False Kvill kvill True 우리는 "kvill"상수를 성명하지 않았기 때문에 상수 탱크에는 처음에 "kvill"이 없었습니다. 우리가 s1을 호출할 때.() 이후 상량 탱크에'kvill'상량을 새로 추가했습니다. 원래 상량 탱크에 없는'kvill'은 여전히 존재합니다.'자신의 주소를 상량 탱크에 등록하는 것'도 아닙니다.
예5:
String str1="java";
String str2="blog";
String s=str1+str2;
System.out.println(s=="javablog");

결과는false입니다.Jvm는 String str1="java"와 같은 유형이 맞습니다.의 String 대상은 상수도에 놓여 있지만, 컴파일할 때 그렇게 하는 것이고, String s=str1+str2;실행할 때 알 수 있습니다. 즉str1+str2는 무더기에서 만들어졌기 때문에false가 되었습니다.

좋은 웹페이지 즐겨찾기