equals와 ==의 차이를 간단히 말하다
3620 단어 equals
1.==에는 두 가지 용법이 있다. 첫째, 8가지 기본 유형에 사용할 때 두 변수의 값이 같은지 아닌지를 판단하고, 같을 때true를 되돌려주고, 같지 않을 때false를 되돌려준다.둘째, 인용 유형에 사용할 때 두 대상의 내용이 같은지 아닌지를 판단하는 것이 아니라 두 대상이 가리키는 메모리 주소가 같은지 판단하는 것이고, 같을 때true를 되돌려주고, 같지 않을 때false를 되돌려준다.
2. equals는 인용 유형에만 사용할 수 있고 기본 유형에 사용할 수 없다. 왜냐하면 equals는 방법이기 때문에 기본 유형은 equals 방법이 없기 때문이다. equals는 대상이 가리키는 내용이 같은지 비교하는 것이다. 같으면true로 돌아가고 다르면false로 돌아간다.
3. equals는 방법이고 ==는 연산자이다. 하나의 클래스가 equals 방법을 다시 쓰지 않을 때 기본적으로 object의 equals 방법이고 Object의 equals 방법은 사실 ==로 판단한다.
먼저 코드를 살펴보겠습니다.
public class A{
publci static void main(String [] args){
int a=15;
int b=15;
System.out.println("a b "+(a==b);}
}
이것은 비교적 간단한 코드이지만 만약에 내가 equals로 비교할 때 오류가 발생할 수 있다. 왜냐하면 equals 방법은 기본 데이터 형식에 사용할 수 없기 때문이다. 만약에 억지로 equals 방법을 사용하려면 정형만 봉인할 수 있기 때문이다.
Integer a1=1;
Integer b1=1;
Integer a2=new Integer(1);
Integer b2=new Integer(1);
System.out.println("a1 b1 == , ?"+(a1==b1));
System.out.println("a1 b1 equals , ?"+a1.equals(b1));
System.out.println("a2 b2 == , ?"+(a2==b2));
System.out.println("a2 b2 equals , ?"+a2.equals(b2));
System.out.println("a1 a2 == , ?"+(a1==a2));
System.out.println("a1 a2 equals , ?"+a1.equals(a2));
이렇게 하면 잘못 보고되지 않을 것이다. 운행의 결과는 다음과 같다.
a1과 b1을 ==로 비교할 때 같습니까?truea1과 b1을 equals로 비교할 때 같습니까?truea2와 b2를 ==로 비교할 때 같습니까?falsea2와 b2를 equals로 비교할 때 같습니까?truea1과 a2를 ==로 비교할 때 같습니까?falsea1과 a2를 equals로 비교했을 때 같습니까?true 실행 결과는 String 유형과 같습니다. 잠시 후 String의 실행 결과만 분석하겠습니다.
4. String 클래스에서 equals와 ==의 차이점에 대해 이야기
먼저 코드를 살펴보십시오.
String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");
String s5="de";
String s6="abcde";
String s7=s1+s5;
우리가 equals 방법이든 ==이든 s1과 s2를 비교할 때 출력하는 것은true이다. 그러나 우리가 주의해야 할 것은 우리가 이렇게 쓰면 시스템이다.out.println ("s1과 s2는 같습니까?"+s1==s2), 이렇게 출력된 답안은false이다. + 연산자의 우선순위가 ==보다 높기 때문에 s1은 먼저 앞의 문자열에 추가한 다음에 s2와 비교하면 답안은false가 될 것이다. 우리는 나중에 프로그램을 쓸 때 반드시 주의해야 한다.
s1과 s2를 비교할 때 구체적인 절차는 다음과 같다. 먼저 s1의 abc를 문자열 탱크에 넣은 다음에 s2는 문자열 탱크에서 이와 같은 문자열이 있는지 찾고 abc를 찾으면 그 문자열을 문자열 탱크에 넣지 않아도 된다. 문자열 탱크의 문자는 자원 공유에 도달하고 공간을 절약할 수 있다.
s3과 s4를 ==로 비교할 때 되돌아오는 값은false이다. 이것은 두 개의 서로 다른 대상이기 때문에 그들이 만들 때 메모리 주소가 틀림없이 다르다. ==비교한 것은 바로 두 대상의 메모리 주소가 같은지 여부이다. 그러므로 되돌아오는 값은false이다. equals로 비교할 때 두 개의 값이 같은지 판단하는 것이다. 프로그램에서 알 수 있듯이 두 사람의 내용이 같기 때문에true로 되돌아간다.
s6과 s7:s6을 비교하면 문자열 상수로 문자열 탱크에 놓이지만 s7은 문자열 탱크에 놓이지 않기 때문에 s6와 s7을 ==로 비교할 때false로 되돌아오고 equals로 비교하면true로 되돌아간다. 그러나 만약에 내가 변수를 성명한다면 Strings8="abc"+ "de".이때 s6와 s8을 ==로 비교했을 때 되돌아오는 것은true이고 equals 방법으로 되돌아오는 것도 틀림없이true이다.이것은 s8이 지금도 문자열 탱크에 놓여 있기 때문에 그들 두 사람의 주소는 같다.
만약에 ==과 equals가 인용 유형에 사용된다면 ==로 판단할 때 ture로 되돌아온다면 equals로 판단해서 되돌아온 것도true가 분명하지만 반대로 반드시 성립된 것은 아니다. 내용이 같고 그들의 주소도 같지 않기 때문에 뚜렷하다. 위의 s3과 s4는 이 관점을 증명했다.그러나 이런 문장을 더하면 달라진다. s3=s4, 이때 어떤 방법으로 판단하든지 되돌아오는 값은ture이다. s4를 s3에 부여하는 것이기 때문에 그들 둘은 같은 대상을 가리킨다.
5. 물론 모든 클래스에 자신의 equals 방법이 있다. 대기열과 맵의 속성을 비교할 때 ==로 비교할 수 없고 equals 방법으로만 비교할 수 있다. 이런 비교는 앞에서 말했듯이 String류와 차이가 많지 않다. 그들이 각자 쓴 equals 방법을 보면 된다.
6. 한마디로 기억하자면 ===기본 데이터 형식의 값이 같은지 인용 유형에서 대상의 메모리 주소가 같은지 비교하는 것이고 equals 방법은 대상의 내용이 같은지 판단하는 것이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Secrets of equals() - Part 2A Point object should only compare equal to a ColoredPoint object if the color field contains a default value. Two objec...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.