Java에서 String 클래스 해석
String a="aa";
String은 기본 데이터 유형이 아니라 참조 유형입니다. 위의 간단한 문장의 경우 Java 컴파일러는 재컴파일 단계에서 이를 결정한 후 "aa"를 입력할 수 있습니다. 현재 클래스 파일의 상수 풀 영역에 저장됩니다(힙이 아님, 특히 Perm 영역에 유의하세요). 상수 풀은 런타임 시 확장될 수도 있습니다. )은 런타임 시 클래스에 대한 호출입니다. 지속적인 주입으로 인해 java.lang.OutofMemory:PermGen 공간 예외가 발생할 수 있습니다. 프로세스는 먼저 이 문자열을 상수 풀의 각 문자열과 비교하는 것입니다. 일치하는 항목이 있으면 상수 풀에 대한 참조를 반환하고, 상수 값을 삽입하고 현재 주소를 반환하는 것을 볼 수 있습니다. String.intern()은 별로 효율적이지 않습니다.
private static void test1(){ String a = “a” + “b” +1; Stirng b = “ab1”; System.out.println(a==b); }
분명히 반환 결과는 True입니다
"=="에 대하여: 기본 데이터 유형의 경우 ==는 (byte, short, int, float, char, double, long과 같은 기본 데이터 유형의 값을 비교하는 것입니다. , 부울), 참조 유형의 경우 비교되는 것은 두 참조 객체의 논리적 주소입니다
equals 및 hashcode() 정보: Object 클래스의 equals 메서드는 비교되는 두 객체 참조의 논리적 주소를 기본값으로 사용합니다(return (this == obj);) , 동등 설계에서는 하위 클래스가 두 개의 동일한 하위 클래스 비교를 스스로 구현해야 합니다(서로 다른 하위 클래스를 비교하는 것은 의미가 없으므로 많은 동등 구현은 먼저 두 개체가 속하는지 여부를 결정합니다) 클래스) 객체가 동일한지 여부, 여기서는 참조된 주소가 동일한지 여부가 아닙니다. Java의 기본 해시코드 메소드는 객체의 해시 값을 제공합니다(네이티브 메소드 호출 비용은 여전히 매우 높음). 일반적으로 System.identifyHashCode(Object) 메소드의 반환 값과 일치합니다. 해시코드 메소드는 객체를 식별하는 데 사용되며 해시 알고리즘에서 객체를 해시하는 데 사용됩니다. String 클래스는 HashCode 메서드를 재정의합니다. 이는 String 클래스의 해당 해시코드를 생성하기 위해 char[]의 모든 문자를 순회해야 합니다. 실제로 객체의 equals 메서드는 해시코드 자체와 아무 관련이 없습니다. 모든 사람이 재작성이라고 생각하게 만드는 일부 클래스의 사용은 equals() 메서드가 hashcode() 메서드를 재정의해야 합니다. 예를 들어, HashMap(및 HashSet, 그러나 HashSet은 HashMap을 사용하여 구현됨)에서 HashMap에 요소를 배치하는 프로세스는 먼저 키의 해시코드 메소드를 호출하고 이 메소드의 반환 값과 길이를 기반으로 엔터티의 인덱스를 계산하는 것입니다. HashMap의 Entity 배열에 이미 요소가 있으면 비교를 위해 key의 equals 메서드를 호출하고, 존재하지 않으면 해당 요소를 연결 목록에 삽입합니다.
컴파일 시간 최적화 정보: 컴파일러의 경우 컴파일 시간 최적화의 원칙은 결정될 수 있는 것(예: 최종)을 최적화하고 결정될 수 없는 최종 유형 변수와 메서드 호출을 처리하지 않는 것입니다. 최적화되지 않은 경우 String a="a" + "b"는 컴파일 타임에 a="ab"로 최적화되고 String a="a" String b=a+"b"는 Stringbuffer의 스플라이싱에 최적화됩니다. 컴파일 시간에
위 내용은 Java에서 String 클래스 해석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

자바의 암스트롱 번호 안내 여기에서는 일부 코드와 함께 Java의 Armstrong 번호에 대한 소개를 논의합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다
