> Java > java지도 시간 > 본문

문자열 문자열 추가 및 비교 소개(상세)

不言
풀어 주다: 2019-04-13 09:36:36
앞으로
4095명이 탐색했습니다.

이 기사는 문자열 문자열의 추가 및 비교에 대한 소개를 제공합니다(상세). 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

문자열 문자열 추가 및 비교

public static void main(String[] args)  {
    String a = "helloword";
    final String b = "hello";
    String d = "hello";
    String c = b + "word";
    String e = d + "word";
    String f ="hello"+"word";
    System.out.println(a == c);
    System.out.println(a == e);
    System.out.println(a == f);

}
로그인 후 복사

输出:
true
false
true
로그인 후 복사

먼저 분명히 짚고 넘어가야 할 점은 참조 데이터형 ==는 주소 값을 비교하고, 같음은 다시 쓰지 않고 주소 값을 비교하고, 다시 쓴 후 비교한다는 점입니다. 내용입니다. String은 다시 작성되었지만 StringBuffer는 다시 작성되지 않았습니다. 두 번째: b가 최종 유형이고 가능한 경우 String 유형이므로

a=c는 true입니다. 컴파일 중에 알려짐 정확한 값, 컴파일러는 이를 컴파일 타임 상수로 사용합니다. 즉, final 변수가 사용되는 경우 이는 상수에 대한 직접 액세스와 동일하며 런타임에 결정할 필요가 없습니다. 따라서 위의 코드에서는 변수 b가 final에 의해 수정되므로 컴파일러 상수로 취급되므로 b를 사용하는 경우 변수 b는 해당 값으로 직접 대체됩니다. 따라서 c = b+"word"는 c = "hello" + "word"와 같습니다. --->final이 있으면 주소 대신 내용을 직접 비교합니다.

a ==e는 false입니다. e = d+"word"가 실제로 StringBuffer 객체를 생성한 다음 StringBuffer 객체를 사용하여 추가 메서드를 실행하여 문자열 객체 "ab"를 생성한 다음 이를 String으로 변환하기 때문입니다. 하지만 이 변환된 String 객체, 즉 위의 s3은 힙에 배치됩니다. 그리고 s4는 상수 풀에 배치된 문자열 상수입니다. 따라서 반환된 내용은 거짓입니다. ----->주소 값이 다릅니다

a==f는 다음과 같은 이유로 true입니다. 상수가 추가되면 실제로 컴파일 중에 "helloword"에 직접 추가됩니다. 이는 JVM의 최적화입니다. 따라서 실행하면 a와 f의 바이트코드가 동일합니다. 상수 풀에 "helloword"가 있으므로 두 참조는 문자열 "helloword"를 가리키므로 반환 결과도 true입니다. ----->같은 주소를 가리키세요

[관련 추천:

Java 튜토리얼

]

위 내용은 문자열 문자열 추가 및 비교 소개(상세)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿