2017-03-22 2 views
0

목록의 큰 데이터 구조와 문자열이있는지도를 해당지도의 키로 만듭니다. 동일한 키가 수천 번 반복 사용됩니다. 이러한 문자열이 인턴되지 않으면 내 코드는 동일한 텍스트를 반복적으로 사용하여 많은 메모리를 소비합니다.Groovy의 문자열 상수는 Java와 같이 인턴입니까?

이 구조체를 만들기 위해 저는 맵 리터럴 구문을 사용하고 있습니다. 특히 궁금한 것은 상수입니다.

[ 
    name: "text", 
    children: something.collect { [name: it.name, city: it.city] } 
] 

답변

2

예, 질문 문자열에 관한 내용은 자바에서 그루브 방식으로 동작합니다. 당신은 쉽게 groovyConsole에를 열어이 문제를 테스트 할 수 있습니다 ==는 개체 평등을 테스트하는 데 사용됩니다

def a = "test" 
def b = "test" 

assert a.is(b) // asserts true 

때문에, 당신은 당신의 변수가 같은 객체를 참조하는 경우()를 테스트하는 것입니다 사용해야합니다.

+1

그리고 나머지 질문에 대답하십시오; 예, [key : value] 구문을 사용할 때의 맵 키는 문자열 상수로 간주됩니다. 그래서'assert [name : 'a'] .keySet(). first(). is ('name')'또한 true로 검증됩니다. 런타임에 키를 해결하면 (예 : 파일에서 읽으면 인스턴스가 동일하지 않습니다. – Steinar

관련 문제