2016-07-21 3 views
0

내가 이해할 수없는, Z는 z="Hello World"하고 왜 될 것입니다 출력이 true이 아닌가요?자바 SE 문자열 풀

+0

This (http://stackoverflow.com/questions/3689952/using-instead-of-equals-for-java-strings)는 도움이 될 수 있습니다 !! – Imran

답변

2

문자열이 변경 불가능하기 때문입니다! 따라서 trim() 메서드는 참조가 다른 String이라는 새 인스턴스를 반환합니다. 소스 코드를 보면서 그것을 볼 수 있습니다.

public String trim() { 
    int len = value.length; 
    int st = 0; 
    char[] val = value; 

    while ((st < len) && (val[st] <= ' ')) { 
     st++; 
    } 
    while ((st < len) && (val[len - 1] <= ' ')) { 
     len--; 
    } 
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this; 
} 

public String substring(int beginIndex, int endIndex) { 
    if (beginIndex < 0) { 
     throw new StringIndexOutOfBoundsException(beginIndex); 
    } 
    if (endIndex > value.length) { 
     throw new StringIndexOutOfBoundsException(endIndex); 
    } 
    int subLen = endIndex - beginIndex; 
    if (subLen < 0) { 
     throw new StringIndexOutOfBoundsException(subLen); 
    } 
    return ((beginIndex == 0) && (endIndex == value.length)) ? this 
      : new String(value, beginIndex, subLen); // new instance! 
} 
2

포인터가 개체와 비교 대상이 달라집니다. 문자열의 경우 다음을 사용해야합니다.

x.equals(z) 
+0

왜 다른가요? "Hello World"는 문자열 풀에 있고 x와 z는 같은 문자열을 가리 킵니다. – Gunel

+0

'x'와'y'는 서로 다른'String' 객체이며, 그 내용은 같은 것입니다. 평등에 대한 내용을 비교하려면 equals()를 사용해야합니다. –