Java 개발에는 겉보기에는 간단해 보이는데 인터넷에 떠도는 주제와 질문이 참 많습니다. 즉, equals()와 == 연산자의 차이점이 무엇인가요?
- == : 연산자는 두 개체의 주소가 같은지 비교하는 데 사용됩니다
- equals(): 두 개체의 내용이 같은지 비교하는 메서드
오늘의 콘텐츠 소개는 약 9분 정도 걸립니다
Pictures
이 차이점을 더 잘 이해하기 위해 예를 살펴보겠습니다.
String str1 = new String("Hello");String str2 = new String("Hello");System.out.println(str1.equals(str2)); // 输出 trueSystem.out.println(str1 == str2); // 输出 false
이 예에서는 두 문자열의 내용은 동일하지만 메모리의 주소는 다릅니다. 따라서 .equals() 메서드를 사용하여 내용을 비교하면 true를 반환하고, "==" 연산자를 사용하여 주소를 비교하면 false를 반환합니다
1. .equals() 메서드를 재정의하세요
Java의 기본, Java의 모든 클래스는 기본적으로 Object 클래스를 상속한다는 것을 알아야 합니다. Object 클래스에는 .equals() 메서드가 있습니다
public boolean equals(Object obj) {return (this == obj);}
코드에서 .equals() 메서드를 찾을 수 있습니다. 기본적으로 비교를 위해 == 연산자를 사용합니다. 하위 클래스가 equals() 메서드를 재정의하지 않은 경우 == 연산자와 equals() 메서드를 사용하면 결과는 정확히 동일합니다. 두 메모리 주소가 서로 다른지 비교하는 데 사용됩니다. 객체는 동일합니다.
그러나 실제 상황은 equals() 메서드를 재정의하는 클래스가 많다는 것입니다. 이는 메모리 주소 비교 요구 사항이 엄격하고 모든 실제 시나리오의 요구 사항을 충족하지 않기 때문입니다. 예를 들어 String 클래스는 비교할 때 대부분은 내용이 같은지 판단하고 싶은 것이지, 메모리 주소가 같은지(객체인지)는 별로 알고 싶지 않습니다.
Java 문자열 상수 풀에 대한 심층 연구 기사에서 우리는 Java 가상 머신이 메모리 활용을 최적화하고 성능을 향상시키기 위해 문자열을 위한 별도의 공간, 즉 문자열 상수 풀을 할당한다는 것을 배웠습니다.
new 키워드를 사용하는 대신 String s = "Hello"를 사용하여 문자열 객체를 생성하는 것이 좋습니다. new를 사용하려면 힙에 추가 메모리 공간 할당이 필요하기 때문입니다.
1.1 String 클래스의 equals() 메서드
Jdk11의 String 클래스의 equals() 메서드
public boolean equals(Object anObject) { //如果是同一个对象(即两个引用指向内存中的同一块地址),则直接返回trueif (this == anObject) {return true;} //如果是String类型的实例if (anObject instanceof String) { //Object类型的对象强制转换为String类型String aString = (String)anObject;//如果当前字符串对象和传入的字符串对象的编码方式相同if (coder() == aString.coder()) { //如果当前字符串和传入的字符串都是Latin1编码,则调用StringLatin1类的equals方法进行比较;如果其中一个或两个字符串是UTF16编码,则调用StringUTF16类的equals方法进行比较return isLatin1() ? StringLatin1.equals(value, aString.value): StringUTF16.equals(value, aString.value);}}return false;}
특별 참고 사항: Latin1(ISO 8859-1이라고도 함) 및 UTF-16(유니코드) 변환 형식 16비트)는 두 가지 다른 문자 인코딩 방법입니다
Latin1과 UTF-16은 두 가지 인코딩 방법이지만 차이는 크지 않습니다. Java8 Java11의 equals() 메소드의 소스 코드는 JDK8
@HotSpotIntrinsicCandidatepublic static boolean equals(byte[] value, byte[] other) {if (value.length == other.length) {int len = value.length >> 1;for (int i = 0; i
1.2의 equals() 메소드와 다릅니다. 예시 설명
public boolean equals(Object anObject) {// 如果是同一个对象(即两个引用指向内存中的同一块地址),则直接返回trueif (this == anObject) {return true;}// 如果是String类型的实例if (anObject instanceof String) {////Object类型的对象强制转换为String类型String anotherString = (String)anObject;int n = value.length;// 如果字符串长度相等if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;// 判断每个字符是否相等while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
출력 결과는 무엇입니까? String 클래스의 equals 메소드는 문자열 객체의 내용이 모두 "Hello"이므로 결과가 true인지 여부를 결정합니다. 예 2:
new String("hello").equals("hello")
출력 결과는 무엇입니까?
== 연산자가 비교한 개체 주소가 동일한지 여부, = =왼쪽이 힙에 생성된 개체이고, 오른쪽이 문자열 상수 풀 개체이므로 내용은 동일하지만 주소가 동일하지 않습니다. 결과는 false입니다
예제 3:
new String("hello") == "hello";
출력 결과는 무엇입니까?
새 개체 완전히 다른 메모리 주소여야 하므로 결과는 false입니다
예제 4:
new String("hello") == new String("hello");
무엇입니까? 출력 결과는?
h와 ello는 모두 문자열 상수 풀에 있으므로 컴파일러가 + 연산자를 만나면 자동으로 이를 hello로 최적화하여 결과가 true가 됩니다.
예 5:
"hello" == "h"+"ello"
출력은 무엇입니까? result?
new String("hello") 실행되면 먼저 문자열 상수 pool에 객체가 생성된 후 intern() 메서드를 실행하면 힙에 객체가 생성되는 것을 발견합니다. hello'는 문자열 상수 풀에 이미 존재하므로 문자열 상수 풀에 있는 객체 참조를 직접 반환한 다음 상수 풀에 있는 문자열 'hello' 비교와 비교하므로 결과는 true입니다
심층 분석 String.intern()은 이미 그 이유를 소개했습니다
2. String 클래스의 .contentEquals() 메서드: 이 메서드는 문자열이 임의의 문자 시퀀스(예: StringBuffer, StringBuilder, String, CharSequence)와 동일한지 비교하는 데 사용할 수 있습니다.new String("hello").intern() == "hello"
Objects.equals("Hello", new String("Hello")); // 返回 true
위 내용은 Java에서 equals()와 ==의 차이점과 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

격변 게임 : AI 에이전트와의 게임 개발 혁명 Blizzard 및 Obsidian과 같은 업계 대기업의 재향 군인으로 구성된 게임 개발 스튜디오 인 Upheaval은 혁신적인 AI 구동 Platfor로 게임 제작에 혁명을 일으킬 준비가되어 있습니다.

Uber의 Robotaxi 전략 : 자율 주행 차량을위한 승차원 생태계 최근 Curbivore 컨퍼런스에서 Uber의 Richard Willder는 Robotaxi 제공 업체를위한 승마 플랫폼이되기위한 전략을 공개했습니다. 그들의 지배적 인 위치를 활용합니다

비디오 게임은 특히 자율적 인 에이전트 및 실제 로봇의 개발에서 최첨단 AI 연구를위한 귀중한 테스트 근거로 입증되며, 인공 일반 정보 (AGI)에 대한 탐구에 잠재적으로 기여할 수 있습니다. 에이

진화하는 벤처 캐피탈 환경의 영향은 미디어, 재무 보고서 및 일상적인 대화에서 분명합니다. 그러나 투자자, 신생 기업 및 자금에 대한 구체적인 결과는 종종 간과됩니다. 벤처 캐피탈 3.0 : 패러다임

Adobe Max London 2025는 Creative Cloud and Firefly에 상당한 업데이트를 제공하여 접근성 및 생성 AI로의 전략적 전환을 반영했습니다. 이 분석에는 Adobe Leadership과의 사전 이벤트 브리핑의 통찰력이 포함되어 있습니다. (참고 : Adob

Meta의 Llamacon 발표는 OpenAi와 같은 폐쇄 된 AI 시스템과 직접 경쟁하도록 설계된 포괄적 인 AI 전략을 보여 주며 동시에 오픈 소스 모델을위한 새로운 수익원을 만듭니다. 이 다각적 인 접근법은 Bo를 대상으로합니다

이 결론에 대한 인공 지능 분야에는 심각한 차이가 있습니다. 어떤 사람들은 "황제의 새로운 옷"을 폭로 할 때라고 주장하는 반면, 인공 지능은 단지 일반적인 기술이라는 생각에 강력하게 반대합니다. 논의합시다. 이 혁신적인 AI 혁신에 대한 분석은 다양한 영향력있는 AI 복잡성을 식별하고 설명하는 것을 포함하여 AI 분야의 최신 발전을 다루는 진행중인 Forbes 열의 일부입니다 (링크를 보려면 여기를 클릭하십시오). 공통 기술로서의 인공 지능 첫째,이 중요한 토론을위한 토대를 마련하기 위해서는 몇 가지 기본 지식이 필요합니다. 현재 인공 지능을 발전시키는 데 전념하는 많은 연구가 있습니다. 전반적인 목표는 인공 일반 지능 (AGI) 및 가능한 인공 슈퍼 인텔리전스 (AS)를 달성하는 것입니다.

회사의 AI 모델의 효과는 이제 핵심 성과 지표입니다. AI 붐 이후 생일 초대장 작성부터 소프트웨어 코드 작성에 이르기까지 생성 AI는 모든 데 사용되었습니다. 이로 인해 언어 모드가 확산되었습니다


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

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

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
