문제

이 질문은 이미 여기에 답이 있습니다.

나는 오늘 강사를 바꾸었고 그는 나에게 이상한 코드를 사용하여 언급했다. (그는 사용하는 것이 낫다고 말했다 .equals 그리고 내가 왜 그런지 물었을 때, 그는 "그랬기 때문에!"라고 대답했습니다.

예를 들어 다음과 같습니다.

if (o1.equals(o2))
{
 System.out.println("Both integer objects are the same");
}

내가 익숙한 대신 :

if (o1 == o2)
{
  System.out.println("Both integer objects are the same");
}

둘의 차이점은 무엇입니까? 그리고 왜 그의 길은 (사용 .equals) 더 나은?

이것을 찾았습니다 빠른 검색에서는 그 대답을 실제로 이해할 수 없습니다.

도움이 되었습니까?

해결책

자바에서 == 항상 두 가지 참고 문헌을 비교합니다.

그러나, 그 equals 메소드가 재정의 될 수 있으므로 두 개의 별개의 객체가 여전히 동일 할 수 있습니다.

예를 들어:

String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });

System.out.println(x == y); // false
System.out.println(x.equals(y)); // true

또한 두 사람이 동등하다는 것을 알고 있어야합니다. 문자열 상수 (주로 문자열 리터럴뿐만 아니라 연결을 통한 문자열 상수 조합)는 동일한 문자열을 참조합니다. 예를 들어:

String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!

여기 x 그리고 y 동일한 문자열에 대한 참조입니다 y 컴파일 타임 상수입니다 "hello".

다른 팁

== 연산자는 객체가 동일한지 비교합니다. 사례. equals () oerator는 비교합니다 물체의 상태 (예 : 모든 속성이 동일하다면). 객체가 다른 물체와 동일 할 때 자신을 정의하기 위해 equals () 메소드를 무시할 수도 있습니다.

당신과 내가 각각 은행에 걸어 가면, 각각은 새로운 계정을 열고 각각은 $ 100를 입금합니다.

  1. myAccount.equals(yourAccount) ~이다 true 그들은 가지고 있기 때문에 같은 값, 하지만
  2. myAccount == yourAccount ~이다 false 그들은 아니기 때문에 같은 계정.

(적절한 정의를 가정합니다 Account 물론 수업. ;-)

==는 연산자입니다. Equals는 객체 클래스에 정의 된 메소드입니다

== 두 객체가 메모리에 동일한 주소를 가지고 있는지 확인하고 원시의 경우 동일한 값이 있는지 확인합니다. 다른 손에 equals 메소드는 비교중인 두 객체가 동일한 값을 가지고 있는지 확인합니다 (물론의 방법에 따라 객체에 대해 Equals 메소드가 구현되었습니다. 기본 요소에 동등한 방법을 적용 할 수 없습니다 (a가 원시 A.Equals (someObject)가 허용되지 않지만 someObject.equals (a)가 허용됨).

== 운영자는 두 개의 객체 참조를 비교하여 동일한 인스턴스를 참조하는지 확인합니다. 이것은 또한 성공적인 경기에서 True를 반환합니다.

public class Example{
public static void main(String[] args){
String s1 = "Java";
String s2 = "Java";
String s3 = new string ("Java");
test(Sl == s2)     //true
test(s1 == s3)      //false
}}

위의 예 ==는 참조 비교입니다. 즉, 두 개체는 동일한 메모리 위치를 가리 킵니다.

String Equals ()는 객체의 값 비교로 평가됩니다.

   public class EqualsExample1{
   public static void main(String args[]){
   String s = "Hell";
   String s1 =new string( "Hello");
   String s2 =new string( "Hello");
   s1.equals(s2);    //true
    s.equals(s1) ;   //false
    }}

위의 예는 문자열의 내용을 비교합니다. 문자열이 일치하면 true가 반환되고 그렇지 않으면 false를 반환합니다.

자바에서 “==” 연산자는 2 개의 객체를 비교하는 데 사용되며 객체가 메모리의 동일한 위치를 참조하는지 확인합니다. 전:

String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1 == obj2)
   System.out.println("obj1==obj2 is TRUE");
else
  System.out.println("obj1==obj2 is FALSE");

문자열이 동일한 정확한 문자 ( "xyz")를 가지고 있지만 위의 코드는 실제로 출력됩니다. OBJ1 == OBJ2는 False입니다.

Java 문자열 클래스는 실제로 기본값을 무시합니다 equals () 객체 클래스에서 구현 - 메모리의 위치가 아니라 문자열의 값 만 확인하도록 메소드를 무시합니다. 즉, 2 개의 문자열 객체를 비교하기 위해 equals () 메소드를 호출하면 실제 문자 순서가 동일하다면 두 객체 모두 동일하게 간주됩니다.

String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1.equals(obj2))
   System.out.printlln("obj1==obj2 is TRUE");
else
  System.out.println("obj1==obj2 is FALSE");

이 코드는 다음을 출력합니다.

OBJ1 == OBJ2는 사실입니다

public static void main(String[] args){
        String s1 = new String("hello");
        String s2 = new String("hello");

        System.out.println(s1.equals(s2));
        ////
        System.out.println(s1 == s2);

    System.out.println("-----------------------------");

        String s3 = "hello";
        String s4 = "hello";

        System.out.println(s3.equals(s4));
        ////
        System.out.println(s3 == s4);
    }

여기이 코드에서 u는 '=='및 '.equals'를 모두 캠페인 할 수 있습니다.

여기 .equals는 참조 객체를 비교하는 데 사용되며 '=='는 객체 상태를 비교하는 데 사용됩니다.

(1) == 프리미티브와 객체 유형 모두에 적용될 수 있지만 equals () 메소드는 객체 유형에만 적용될 수 있습니다.

(2) == 컨텐츠 비교를 위해 재정의 할 수는 없지만 컨텐츠 비교를 위해 동등한 방법을 재정의 할 수 있습니다 (예 : 문자열 클래스, 래퍼 클래스, 수집 클래스).

(3) == 이기종 유형을 신청하려고 할 때 비교할 수없는 유형 오류가 발생합니다.

그만큼 equals( ) 방법과 == 운영자는 두 가지 다른 작업을 수행합니다. 그만큼 equals( ) 메소드 a 내부의 문자를 비교합니다 String 물체. 그만큼 == 연산자는 두 개의 객체 참조를 비교하여 동일한 인스턴스를 참조하는지 여부를 확인합니다. 다음 프로그램은 두 개의 다른 문자열 객체에 동일한 문자를 포함 할 수있는 방법을 보여 주지만 이러한 객체에 대한 참조는 동일하게 비교하지 않습니다.

// equals() vs ==
class EqualsNotEqualTo {
     public static void main(String args[]) {
          String s1 = "Hello";
          String s2 = new String(s1);
          System.out.println(s1 + " equals " + s2 + " -> " +
          s1.equals(s2));
          System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2));
     }
}

변수 s1 작성자가 생성 한 문자열 인스턴스를 나타냅니다 “Hello”. 에 의해 언급 된 대상s2 함께 만들어졌습니다 s1 이니셜 라이저로. 따라서 두 문자열 객체의 내용은 동일하지만 별개의 객체입니다. 이것은 그것을 의미합니다 s1 그리고 s2 동일한 개체를 언급하지 않으므로 ==, 여기에 이전 예제의 출력에 의해 표시되는 것처럼 :

Hello equals Hello -> true
Hello == Hello -> false

두 피연산자가 동일한 객체에 속하면 "=="연산자가 true를 반환하지만 단일 객체 다중 값을 할당 할 수 없으므로 true를 반환 할 때 true를 반환한다고 가정 해 봅시다.

public static void main(String [] args){
    String s1 = "Hello";
    String s1 = "Hello";  // This is not possible to assign multiple values to single object
    if(s1 == s1){
      // Now this retruns true
   }
}

이제 이것이 실제로 말하면, 그것이 일어나지 않으면 이것이 == 인 이유는 기능을 비교합니다 ....

다음은 문제에 대한 간단한 해석입니다.

== (동일) 산술 표현을 평가하는 데 사용

반면

string을 비교하는 데 사용되는 equals () 메소드

따라서 문자열 관련 작업에 대한 숫자 작업 및 equals () 메소드의 경우 ==를 사용하는 것이 좋습니다. 따라서 객체를 비교하기 위해 equals () 메소드가 올바른 선택입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top