Equals()메소드에서 Java 작동기간에 데이터 입력

Let's 을 고려해 먼저 다음 식에서 Java.

Integer temp = new Integer(1);
System.out.println(temp.equals(1));

if(temp.equals(1))
{
     System.out.println("The if block executed.");
}

이러한 모든 문 잘 작동합니다. 에 대해 의심의 여지가 없습니다. 식temp.equals(1)는 평가를true으로 예상되고 문서만약에블록 실행됩니다.


지금 할 때,나는 데이터 형식을 변경하에서정수temp1.equals(1)은 예기치 않게 평가하false다음과 같습니다.

Long temp1 = new Long(1);
System.out.println(temp1.equals(1));

if(temp1.equals(1))
{
    System.out.println("The if block executed.");
}

이들은 해당 문을 사람들에 언급된 선행 조각만 데이터의 유형이 변경되었고 그들은 행동을 정확하게 반대입니다.

temp1.equals(1)평가false와 결과적으로만 문을 내는만약에블록 실행되지 않는 반전의 앞의 문이 있습니다. 방법?

질문에 대한 의견 (2)
해결책

You'다시 비교하는에는int. Javadoc 에 대한java.랭.긴#equals`말하는 것은 방법

비교하여 이 객체를 지정한 객체입니다. 결과는 사실 경우에만 인수가 null 이 아니고 긴체를 포함하는 동일한 장 값으로 합니다.

대신하려고시스템이다.니다.system.out.println(새로운 길이(1).equals(1L));지금 당신이'다시 비교하는대신에에는정수,그것을 인쇄할 것이true이다.

해설 (5)

리터럴 값이1발견하는,it's anint. 시 위의 코드와 함께이는 대신:

System.out.println(temp1.equals(1L));

if (temp1.equals(1L))

당신이 볼 수 있듯이,을 두고L후 문자 값이1을 나타내는's along,그리고 다음을 비교를 예상대로 작동합니다.

해설 (0)

이유는 당신이 할 수있는 비교하기 때문입의 autoboxing 에서 Java.

실제적인 방법 당신은 당신을 호출하는 this:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Long.html#equals(java.랭.체)

는 비교하는 장 개체의 몇 가지 다른 객체하지 않는,실제 기본 int.

당신이 부를 때 무슨 일이 일어나는 방법은 원시인정수(1)는 autoboxed 로체(정수)그래서 그 다음 당신이 효과적으로 전화:

new Long(1).equals(new Integer(1));

왜 그것은 실패합니다.

이런 이유를 호출하는 경우

new Long(1).equals(1L) 

이 작업하기 때문에,자바 자동 박스는1(원시적이이 아닌int)으로오래객체지 않는정수개체입니다.

해설 (0)

Java 되고 있다.

을 수행할 경우 다음과 같은 비교 자바가 자동으로 캐스팅 int 긴(로 포함될 수 있습니다 값 int 포함할 수 있다). 과 비교가 사이에 두 개의 걷고 두지 않 수.

int i = 1;
long l = 1L;
boolean b = i == l;

Java 을 할 수 있기 때문에 이에 대한 정보를 입력il을 컴파일할 때 알려진을 수행할 때는 비교입니다. 그러나 사용하는 경우 박스 버전에 입력할 수 있습 컴파일할 때 알려진,그러나not을 수행할 때는 비교입니다. 이 때문에 비교가 이내에 완료한 다음 방법,그리고 그 이후 같이 걸리 개체 매개변수로 입력한 정보는 손실됩니다. 따라서 Java 은 게으르고 만지 확인하는 두 개의 박스 숫자가 동일하다면 그들은 양쪽의 인스턴스의 동일한 수 클래스(예. 모두 정수,또는 둘 다 긴거나,더블,etc...).

로만 완전히 신뢰할 수 있는 방법을 비교한 두 번호를 알 수 없는 형식의 런타임 시에는 변환 모두 문자열을 모두 BigDecimal 다음 방법을 사용하 compareTo(고not음). 하지만 알고 있는 경우에 당신은 이제까지 얻을 걷고 및 정 인생은 간단한 프로그램은 다음과 같습니다.

Number n0 = new Long(1L);
Number n1 = new Integer(1);
boolean equal = n0.longValue() == n1.longValue();
해설 (1)

에 따라Javadoc's 페이지`.은 방법truetrue는 경우에만

  1. 인수가
  2. 는 경우(1)사실,다음은객체가 있어야 합 같은 값

시나리오에서,1int아닌체,그래서 그것은 실패(1)에 따라서,false 가 됩니다. 해야 하는 경우 테스트를,사용 1L대신 합니다.

해설 (0)

는 행위와 일치 autoboxing 변환1정수는 다음을 비교하여 동일하고,다른 사람의 정수(1). 을 비교하는에는정수수익률false`.

당신이 사용하는 것1L에 대해 비교하는그것을 얻을 것이다true이다.

해설 (0)

오래 temp1=새로운 길이(1);시스템입니다.니다.system.out.println(temp1.equals(1));

if(temp1.equals(1)){ 시스템입니다.니다.system.out.println("if 블록 실행됩니다.");}

이 코드에서는temp1.equals(1)은교정수객체를 제공하는 결과 false,우리는 그것을 수정할 수 있을 사용하여1L대신에1,,,예를 들어temp1.equals(1L),이렇게 함으로써 우리는 비교하는객체와 함께고 진정한 결과 제공

해설 (0)

의 구현은equals()method 의 클래스보여 줍니다 왜:

public boolean equals(Object obj) {
    if (obj instanceof Long) {
        return value == ((Long)obj).longValue();
    }
    return false;
}
해설 (0)

Equals 방법에서 Java.랭.긴 처음 시작하는 다른 장 확인 후에는 값과 비교.

public boolean equals(Object obj) {
     if (obj instanceof Long) {
         return value == ((Long)obj).longValue();
     }         
     return false;
}

그래서 만약 당신이 사용하려고 및 정수 값 int 장소의 오래 값을 다음을 먼저 확인에 실패하고 따라서 당신을 얻을 것이 거짓으로 결과입니다.

해설 (0)

을 비교할 수 있습니다 오래/정수 값없이 배부 equals(). 이것은 경우에만 필요 비교할 문자열로하고 있는 것으로 알고 있습니다.

해설 (0)