내가 이해할 수없는, Z는 z="Hello World"
하고 왜 될 것입니다 출력이 true
이 아닌가요?자바 SE 문자열 풀
0
A
답변
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()를 사용해야합니다. –
This (http://stackoverflow.com/questions/3689952/using-instead-of-equals-for-java-strings)는 도움이 될 수 있습니다 !! – Imran