>  기사  >  Java  >  문자열 문자열 추가 및 비교 소개(상세)

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

不言
不言앞으로
2019-04-13 09:36:364082검색

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

문자열 문자열 추가 및 비교

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으로 문의하시기 바랍니다. 삭제