[java] Java에서 int가 null 일 수 있습니까?

Java에 int있을 수 있습니까 null?

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

int data = check(Node root);

if ( data == null ) {
 // do something
} else {
 // do something
}

내 목표는을 반환하는 함수를 작성하는 것입니다 int. 이 int노드는 노드의 높이에 저장되며 노드가 없으면 null이되므로 확인해야합니다.

나는 숙제를 위해 이것을하고 있지만이 특정 부분은 숙제의 일부가 아니며, 내가하고있는 일을 통과하는 데 도움이됩니다.

의견에 감사드립니다. 그러나 실제로 코드의 내용을 읽은 사람은 거의없는 것 같습니다. 작동하지 않는 것을 쉽게 알 수있었습니다.



답변

int null이 있지만 반드시 Integer 깡통을 . null 정수를 개봉 할 때주의를 기울여야합니다. 많은 혼란과 헤드 스크래치가 발생할 수 있습니다!

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

int a = object.getA(); // getA returns a null Integer

당신에게 줄 것이다 NullPointerException오브젝트가 null없는에도 불구하고!

귀하의 질문에 후속 조치를 취하기 위해 값 이 없음 을 나타내 려면 조사하겠습니다.java.util.Optional<Integer>


답변

아니요. 기본 요소가 아닌 객체 참조 만 null 일 수 있습니다.


답변

알아내는 좋은 방법 :

public static void main(String args[]) {
    int i = null;
}

컴파일을 시도하십시오.


답변

Java에서 int는 기본 유형이며 객체로 간주되지 않습니다. 객체 만 null 값을 가질 수 있습니다. 따라서 귀하의 질문에 대한 대답은 아니오입니다. 그것은 null 일 수 없습니다. 그러나 가장 원시적 인 유형을 나타내는 객체가 있기 때문에 그렇게 간단하지 않습니다.

Integer 클래스는 int 값을 나타내지 만 널값을 보유 할 수 있습니다. check방법 에 따라 정수 또는 정수를 반환 할 수 있습니다.

이 동작은 루비와 같은 좀 더 순수한 객체 지향 언어와는 다릅니다. 여기서 int와 같은 “기본적인 것”도 객체로 간주됩니다.


답변

위의 모든 대답과 함께이 점도 추가하고 싶습니다.

기본 유형의 경우 고정 메모리 크기가 있습니다. 즉 int의 경우 4 바이트가 있고 char의 경우 2 바이트가 있습니다. 메모리 크기가 고정되어 있지 않기 때문에 null은 객체에만 사용됩니다.

기본적으로 우리는

   int a=0;

그리고 아닙니다

   int a=null;

다른 기본 유형과 동일하므로 null은 기본 유형이 아닌 객체에만 사용됩니다.


답변

코드는 컴파일되지 않습니다. Object다음 null과 같이 완전한 사람 만있을 수 있습니다 Integer. 다음은 null을 테스트 할 수있는 경우를 보여주는 기본 예입니다.

Integer data = check(Node root);

if ( data == null ) {
 // do something
} else {
 // do something
}

반면 check()에 return으로 선언 되면 결코int없으며null 전체 if-else블록이 불필요합니다.

int data = check(Node root);

// do something

autoboxing 문제는 check()return으로 선언 된 경우에도 적용되지 않습니다 int. 반환 된 경우 대신에 할당 할 때 Integer위험 NullPointerException할 수 있습니다 . 그것을 블록 으로 할당 하고 블록을 사용하는 것은 실제로 필수적이었습니다.intIntegerIntegerif-else

오토 박싱에 대한 자세한 내용은 이 Sun 안내서를 확인하십시오 .


답변

우리가 할 수있는 것처럼 int i선언하는 대신 선언 Integer i할 수 있습니다.i=null;

Integer i;
i=null;