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
와 결과적으로만 문을 내는만약에
블록 실행되지 않는 반전의 앞의 문이 있습니다. 방법?
23
10
You'다시 비교하는
길
에는int
. Javadoc 에 대한java.랭.긴#equals`말하는 것은 방법대신하려고
시스템이다.니다.system.out.println(새로운 길이(1).equals(1L));
지금 당신이'다시 비교하는길
에오
대신에길
에는정수
,그것을 인쇄할 것이true
이다.리터럴 값이
1
발견하는오
,it's anint
. 시 위의 코드와 함께이는 대신:고
당신이 볼 수 있듯이,을 두고
L
후 문자 값이1
을 나타내는's along
,그리고 다음을 비교를 예상대로 작동합니다.이유는 당신이 할 수있는 비교하기 때문입의 autoboxing 에서 Java.
실제적인 방법 당신은 당신을 호출하는 this:
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Long.html#equals(java.랭.체)
는 비교하는 장 개체의 몇 가지 다른 객체하지 않는,실제 기본 int.
당신이 부를 때 무슨 일이 일어나는 방법은 원시인
정수(1)
는 autoboxed 로체(정수)
그래서 그 다음 당신이 효과적으로 전화:왜 그것은 실패합니다.
이런 이유를 호출하는 경우
이 작업하기 때문에,자바 자동 박스는
1
(원시적이길
이 아닌int
)으로오래
객체지 않는정수
개체입니다.Java 되고 있다.
을 수행할 경우 다음과 같은 비교 자바가 자동으로 캐스팅 int 긴(로 포함될 수 있습니다 값 int 포함할 수 있다). 과 비교가 사이에 두 개의 걷고 두지 않 수.
Java 을 할 수 있기 때문에 이에 대한 정보를 입력
i
과l
을 컴파일할 때 알려진과을 수행할 때는 비교입니다. 그러나 사용하는 경우 박스 버전에 입력할 수 있습 컴파일할 때 알려진,그러나not을 수행할 때는 비교입니다. 이 때문에 비교가 이내에 완료한 다음 방법,그리고 그 이후 같이 걸리 개체 매개변수로 입력한 정보는 손실됩니다. 따라서 Java 은 게으르고 만지 확인하는 두 개의 박스 숫자가 동일하다면 그들은 양쪽의 인스턴스의 동일한 수 클래스(예. 모두 정수,또는 둘 다 긴거나,더블,etc...).로만 완전히 신뢰할 수 있는 방법을 비교한 두 번호를 알 수 없는 형식의 런타임 시에는 변환 모두 문자열을 모두 BigDecimal 다음 방법을 사용하 compareTo(고not음). 하지만 알고 있는 경우에 당신은 이제까지 얻을 걷고 및 정 인생은 간단한 프로그램은 다음과 같습니다.
에 따라Javadoc's 페이지
길
`.은 방법truetrue
는 경우에만길
체길
객체가 있어야 합 같은 값시나리오에서,
1
은int
아닌길
체,그래서 그것은 실패(1)에 따라서,false 가 됩니다. 해야 하는 경우 테스트를오
,사용 1L
대신 합니다.는 행위와 일치 autoboxing 변환
1
는정수
는 다음을 비교하여 동일하고,다른 사람의 정수(1). 을 비교하는
길에는
정수수익률
false`.당신이 사용하는 것
1L
에 대해 비교하는길
그것을 얻을 것이다true
이다.이 코드에서는
temp1.equals(1)
은교롱
개정수
객체를 제공하는 결과 false,우리는 그것을 수정할 수 있을 사용하여1L
대신에1
,,,예를 들어temp1.equals(1L)
,이렇게 함으로써 우리는 비교하는길
객체와 함께길
고 진정한 결과 제공의 구현은
equals()
method 의 클래스오보여 줍니다 왜:Equals 방법에서 Java.랭.긴 처음 시작하는 다른 장 확인 후에는 값과 비교.
그래서 만약 당신이 사용하려고 및 정수 값 int 장소의 오래 값을 다음을 먼저 확인에 실패하고 따라서 당신을 얻을 것이 거짓으로 결과입니다.
을 비교할 수 있습니다 오래/정수 값없이 배부 equals(). 이것은 경우에만 필요 비교할 문자열로하고 있는 것으로 알고 있습니다.