Java에서 'boolean'및 'Boolean'의 기본값


260

Java에서 boolean(primitive) 및 Boolean(primitive wrapper) 의 기본값은 무엇입니까 ?

답변:



390

Object와 같은 any의 기본값 Booleannull입니다.

a의 기본값 boolean은 false입니다.

참고 : 모든 기본 요소에는 랩퍼 클래스가 있습니다. 모든 래퍼는 기본값이 인 참조를 사용합니다 null. 기본 요소는 다른 기본값을 갖습니다.

boolean -> false

byte, char, short, int, long -> 0

float, double -> 0.0

참고 (2) : void 래퍼 Void가 있으며 기본값도 있으며 null해킹을 사용하지 않고 가능한 값입니다.


2
나는 하나가 언급 수 있다고 생각 Boolean되어 Object, 그 첫 번째 줄은 명백한 의미를 만들 것입니다. 이것은 매우 기본적으로 들리지만 이와 같은 기본적인 질문을하는 사람에게는 도움이 될 수 있습니다.
Suma

23

부울 또는 일
수 있습니다 . 기본값은 입니다.truefalse
false

(출처 : 자바 프리미티브 변수 )

부울
될 수 Boolean오브젝트가 표현 true하거나 false, 또는 할 수있다 null.
기본값은 null입니다.


17

요청해야 할 경우 필드 / 변수를 명시 적으로 초기화해야합니다. 검색 해야하는 경우 다른 사람도 그렇게해야 할 가능성이 있기 때문입니다.

프리미티브의 값은 여기에서boolean 볼 수 있듯이 false 입니다.

다른 사람들이 언급했듯이 a의 값은 Boolean기본적으로 null입니다.


공식 출처를 참조 해 주셔서 감사합니다. 초기화에 대해서는 지식 부족을 보완 할 필요가 없습니다.
LoBo

2
'지식 부족'은 비교할 것으로 예상되는 수준이 있음을 의미합니다. 이 최소한의 지식 수준이 분명하면 동의합니다. 그렇지 않다면 좀 더 분명하게 잘못하는 것이 현명합니다. 이 모든 것은 다소 개인적인 / 팀 결정 / 의견이다.
Peter Tillemans

4
@LoBo-잠재적 인 지식 부족을 보상하는 데 아무런 문제가 없다고 생각합니다. 누가 코드를 관리 할 것인지 알 수 없습니다. 성능에 거의 영향을 미치지 않으면 서 코드를보다 쉽게 ​​이해 및 / 또는 읽을 수있게하는 것은 좋은 일입니다.
ferekdoley

9

부울은 객체입니다. 따라서 인스턴스 변수이면 null이됩니다. 메소드 내에 선언 된 경우 초기화해야합니다. 그렇지 않으면 컴파일러 오류가 발생합니다.

프리미티브 즉 부울로 선언하는 경우. 인스턴스 변수 (또는 클래스 변수) 인 경우 기본적으로 값은 false입니다. 메소드 내에 선언 된 경우 여전히 true 또는 false로 초기화해야하거나 컴파일러 오류가 있습니다.


6

초기화되지 않은 Boolean멤버 (실제로 유형의 객체에 대한 참조 Boolean)의 기본값은 null입니다.

초기화되지 않은 boolean(primitive) 멤버의 기본값은 false입니다.


4

의 기본값은 없습니다 Boolean. 또는 Boolean로 구성해야합니다 . 객체가 초기화되지 않은 경우을 가리 킵니다 .booleanStringnull

기본의 기본값 booleanfalse입니다.

http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


나는이 3 가지 공감대가 당신이 "불명확 한 것이 없다"고 말했기 때문이라고 생각합니다. 말했듯이 초기화되지 않은 객체 참조는을 가리 킵니다 null. null이 기본값이므로, 당신이 말할 때 당신이 무엇을 말하고 있는지 잘 모르겠습니다. "당신은" 기본적으로 Booleantrue아니고 "와 같은 것을 의미 했습니까 false?
Radiodef

예, 당신이 넣는 것이 더 정확합니다. 더 간결한 답변이 이미 있습니다. 게시물을 내리거나 수정하여 얻는 것이 무엇인지 잘 모르겠습니다.
Stealth Rabbi

1
명확히하기 위해, 나는 공감하지 않았으며 편집 내용은 내 의견과 완전히 관련이 없습니다. 제안 된 문구를 승인하면 답변을 수정하는 것이 좋으며 의견을 삭제하여 정리할 수 있습니다.
Radiodef

1
class BooleanTester
{
    boolean primitive;
    Boolean object;

    public static void main(String[] args) {
        BooleanTester booleanTester = new BooleanTester();
        System.out.println("primitive: " + booleanTester.getPrimitive());
        System.out.println("object: " + booleanTester.getObject());
}

    public boolean getPrimitive() {
        return primitive;
    }

    public Boolean getObject() {
        return object;
    }
}

산출:

primitive: false
object: null

이것은 명백한 것처럼 보이지만 Jackson이 객체를 JSON으로 직렬화하는 동안 게터를 호출 한 후 NPE를 던지고 할당되지 않은 기본 부울을 반환하는 상황이 발생했습니다. 이로 인해 잭슨은 Null을 받고 메소드를 호출하려고한다고 생각했기 때문에 NPE가되었습니다. 내가 틀렸어.

이야기의 교훈은 자바가 프리미티브에 메모리를 할당 할 때, 그 메모리는 초기화되지 않더라도 값을 가지는데, 이는 자바가 부울에 대해 거짓과 같다는 것입니다. 반대로, Boolean과 같이 초기화되지 않은 복합 객체에 메모리를 할당 할 때 객체 자체가 아니라 해당 객체에 대한 참조를위한 공간 만 할당합니다. 메모리에 참조 할 객체가 없습니다.

엄밀히 말하면, "기본값은 false"라는 말이 조금 벗어난 것 같습니다. Java가 메모리를 할당하지 않고 명시 적으로 설정 될 때까지 false 값을 할당한다고 생각합니다. Java가 메모리를 할당하고 메모리에있는 모든 값은 'false'의 값과 동일하다고 생각합니다. 그러나 실제적인 목적으로 그들은 같은 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.