다음 코드상수 문자열이 생성/삭제되는시기는 언제입니까? 이러한 문자열이 작성되면
public static void method(String[] srgs){
try{
}catch(){
System.out.println("Hello World" + "one");}
catch(..){
System.out.println("Hello World" + "two");}
catch(..){
System.out.println(getString());}
}
을 고려? 나는 런타임에 예외가 발생할 때 문자열이 생성 될 것이라고 가정합니다. 문자열은 런타임에 작성되어 표시됩니다. 내 동료는 그들이 클래스가로드되는 즉시 만들어지는 일정한 문자열이므로 나에게 알려줍니다. 그 맞습니까?
문자열은 언제 수집됩니까? 쓰레기 수거는하고 있습니까? 동일한 메소드가 프로그램에서 여러 번 호출 될 수 있다고 가정하면 캐시하는 것만으로는 충분하지 않습니까?
요아킴에게 감사드립니다. SOP ("Hello World"+ getstr())를 고려해보십시오.이 경우 여전히 상수 문자열이 생성됩니까? 이 줄이 실행되면 두 번째 문자열이 생성됩니까? 2 번째 String 쓰레기는 수집 되었습니까? 당신은 내가 1 점에 대답 한 곳에서 저에게 소식을 주시겠습니까? – Geek
JLS의 관련 섹션을 연결했습니다. ''HelloWorld "+ getstr()'은 ** String ** 리터럴이 아닙니다. 새로운'String' 객체는 라인이 실행될 때마다 만들어지며 그 객체는 정상적으로 가비지 수집됩니다. –
@JoachimSauer "HelloWorld"+ getstr()의 경우 1. 클래스가로드 될 때 "HelloWorld"가 여전히 생성됩니까? 2. 문자열에서 가비지 수집을 중지하지 않으려면 무엇을 사용해야합니까? 새로운 String ("HelloWorld")가 도움이됩니까? – Jaskey