문제

저는 초보자 자바 코더이며 정수 클래스의 변수를 API에서 세 가지 다른 방법으로 설명 할 수 있습니다. 다음 코드가 있습니다.

if (count.compareTo(0)) { 
            System.out.println(out_table);
            count++;
    }

이것은 루프 안에 있고 출력 만 있습니다 out_table.
내 목표는 정수의 가치가 있는지 알아내는 방법을 알아내는 것입니다. count > 0.

나는 그것을 알고있다 count.compare(0) 올바른 방법입니까? 아니면 그다 count.equals(0)?

나는 알고있다 count == 0 부정확하다. 이게 옳은 거니? 정당한 값 비교 연산자가 있습니까? count=0?

도움이 되었습니까?

해결책

정수는 자동 박스가 있으므로 그냥 할 수 있습니다

if (count > 0) {
    .... 
}

다른 팁

an을 알아 내기 위해 Integer 0보다 클 수 있습니다.

  • 확인하는 경우 확인하십시오 compareTo(O) 양수를 반환합니다.

    if (count.compareTo(0) > 0)
         ...
    

    그러나 그것은 꽤 바보처럼 보이지 않습니까? 그냥 더 나은 ...

  • 사용 오토 옥싱1:

    if (count > 0)
        ....
    

    이것은 다음과 같습니다.

    if (count.intValue() > 0)
        ...
    

    "=="이와 같이 평가됩니다 Integer 피연산자가 아닌 비스듬한 int 오페라 박스 박스. 그렇지 않으면, count == 0 때에 거짓을 반환합니다 count 초기화되었습니다 new Integer(0) (왜냐하면 "=="참조 평등 테스트).

1기술적으로 첫 번째 예제는 사용합니다 오토 옥싱 (Java 1.5 이전에는 통과 할 수 없었습니다 int 에게 compareTo) 그리고 두 번째 예제는 사용됩니다 Unboxing. 결합 된 기능은 종종 단순히 "자가 옥싱"이라고 불리며, 종종 두 가지 유형의 변환을 "아우토 옥스"로 호출하도록 확장됩니다. 용어의 완화 사용에 대해 사과드립니다.

두 가지 이유로 불필요한 자서전을 피하는 것이 좋습니다.

우선, 그것은 int < int, 당신이 (때로는) 여분의 객체를 만드는 것처럼;

void doSomethingWith(Integer integerObject){ ...
  int i = 1000;
  doSomethingWith(i);//gets compiled into doSomethingWith(Integer.valueOf(i));

더 큰 문제는 숨겨진 아가해링이 예외를 숨길 수 있다는 것입니다.

void doSomethingWith (Integer count){
  if (count>0)  // gets compiled into count.intValue()>0

이 방법을 null a NullPointerException.

Java의 프리미티브와 래퍼 객체 사이의 분할은 항상 속도를위한 Kludge로 묘사되었습니다. 오토 옥스화는 거의 이것을 숨기지 만, 유형을 추적하는 것만으로 더 깨끗합니다. 정수 객체가 있다면 전화 할 수 있습니다. compare() 또는 intValue(), 원시가 있다면 값을 직접 확인하십시오.

당신은 또한 평등을 사용할 수 있습니다.

 Integer a = 0;

 if (a.equals(0)) {
     // a == 0
 }

다음과 같습니다.

 if (a.intValue() == 0) {
     // a == 0
 }

그리고 또한:

 if (a == 0) {

 }

(Java 컴파일러가 자동으로 추가됩니다 intvalue())

오토 옥싱/오토 박스는 상당한 오버 헤드 (특히 내부 루프)를 소개 할 수 있습니다.

당신은 확실히 사용할 수 있지만 compareTo 정수 인스턴스에서 코드를 읽을 때 명확하지 않으므로 그렇게하지 않아야합니다.

Java는 오토 옥싱을 사용할 수 있습니다 (참조 http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html) int와 직접 비교하려면 다음을 수행 할 수 있습니다.

if (count > 0) { }

그리고 Integer 사례 count 자동으로 변환됩니다 int 비교를 위해.

이것을 이해하는 데 어려움이 있다면 위의 링크를 확인하거나 다음을 수행한다고 상상해보십시오.

if (count.intValue() > 0) { }

조심해야 할 점은 두 번째 값이 문자 '0'대신 또 다른 정수 객체 인 경우 '=='연산자는 객체 포인터를 비교하고 자동 작동하지 않습니다.

즉:

Integer a = new Integer(0);   
Integer b = new Integer(0);   
int c = 0;

boolean isSame_EqOperator = (a==b); //false!
boolean isSame_EqMethod = (a.equals(b)); //true
boolean isSame_EqAutoUnbox = ((a==c) && (a.equals(c)); //also true, because of auto-unbox

//Note: for initializing a and b, the Integer constructor 
// is called explicitly to avoid integer object caching 
// for the purpose of the example.
// Calling it explicitly ensures each integer is created 
// as a separate object as intended.
// Edited in response to comment by @nolith

글쎄, 나는 이것에 늦을지 모르지만 무언가를 나누고 싶습니다.

입력이 주어진다 : System.out.println (isgreaterthanzero (-1));

public static boolean isGreaterThanZero(Integer value) {
    return value == null?false:value.compareTo(0) > 0;
}

보고 거짓

public static boolean isGreaterThanZero(Integer value) {
    return value == null?false:value.intValue() > 0;
}

진실로 반품하여 '비교'에서 더 정확할 것이라고 생각합니다.

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