답변:
Object
와 같은 any의 기본값 Boolean
은 null
입니다.
a의 기본값 boolean
은 false입니다.
참고 : 모든 기본 요소에는 랩퍼 클래스가 있습니다. 모든 래퍼는 기본값이 인 참조를 사용합니다 null
. 기본 요소는 다른 기본값을 갖습니다.
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
참고 (2) : void
래퍼 Void
가 있으며 기본값도 있으며 null
해킹을 사용하지 않고 가능한 값입니다.
Boolean
되어 Object
, 그 첫 번째 줄은 명백한 의미를 만들 것입니다. 이것은 매우 기본적으로 들리지만 이와 같은 기본적인 질문을하는 사람에게는 도움이 될 수 있습니다.
부울 또는 일
수 있습니다 .
기본값은 입니다.true
false
false
(출처 : 자바 프리미티브 변수 )
부울
될 수 Boolean
오브젝트가 표현 true
하거나 false
, 또는 할 수있다 null
.
기본값은 null
입니다.
요청해야 할 경우 필드 / 변수를 명시 적으로 초기화해야합니다. 검색 해야하는 경우 다른 사람도 그렇게해야 할 가능성이 있기 때문입니다.
프리미티브의 값은 여기에서boolean
볼 수 있듯이 false 입니다.
다른 사람들이 언급했듯이 a의 값은 Boolean
기본적으로 null입니다.
의 기본값은 없습니다 Boolean
. 또는 Boolean
로 구성해야합니다 . 객체가 초기화되지 않은 경우을 가리 킵니다 .boolean
String
null
기본의 기본값 boolean
은 false
입니다.
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
null
. null
이 기본값이므로, 당신이 말할 때 당신이 무엇을 말하고 있는지 잘 모르겠습니다. "당신은" 기본적으로 Boolean
도 true
아니고 "와 같은 것을 의미 했습니까 false
?
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'의 값과 동일하다고 생각합니다. 그러나 실제적인 목적으로 그들은 같은 것입니다.