언제 부울의 null 값을 사용해야 하는가?
자바boolean
의 가치를 인정하다true
그리고false
은 Booleane을 , Booleane은 동인이다.true
false
그리고null
나는 나의 변환을 시작했다.boolean
로.Boolean
수 . 이것은 다음과 같은 시험에서 충돌을 유발할 수 있다.
Boolean set = null;
...
if (set) ...
시험 중에
if (set != null && set) ...
조작되고 오류가 발생하기 쉬운 것 같다.
만약 있다면, 언제 사용하는 것이 유용한가?Boolean
s 값을 null 값으로 지정하시겠습니까?만약 그렇지 않다면, 포장된 물체의 주요 장점은 무엇인가?
업데이트: 귀중한 답변이 너무 많아서 내 답변에 그 중 일부를 요약했다.나는 기껏해야 자바 중간고사라서 내가 유용하다고 생각하는 것들을 보여주려고 노력해왔다.질문이 "잘못 표현된" 질문이지만(부울은 "null 값을 가질 수 없다") 다른 사람들이 같은 오해를 할 경우를 대비하여 질문을 남겨두었다.
사용하다boolean
Boolean
네가 할 수 있을 때마다이것은 많은 것을 피할 것이다.NullPointerException
그리고 당신의 코드를 더욱 견고하게 만드세요.
Boolean
예를 들어 유용하다.
- 콜레언을 컬렉션에 저장(목록, 지도 등)
- nullable 부울(예: 데이터베이스의 nullable boolean 열에서 오는 것)을 나타냄null 값은 이 맥락에서 "우리는 그것이 진실인지 거짓인지 모른다"를 의미할 수 있다.
- 매번 메서드가 인수로 Object를 필요로 하고 부울 값을 전달해야 한다.예를 들어, 다음과 같은 반사 또는 방법을 사용할 경우
MessageFormat.format()
.
나는 거의 사용하지 않는다.Boolean
왜냐하면 그것의 의미론은 모호하고 모호하기 때문이다.기본적으로 당신은 진실, 거짓 또는 알 수 없는 3가지 국가 논리를 가지고 있다.예를 들어 사용자가 두 값 중 하나를 선택할 수 있도록 하고 사용자가 전혀 응답하지 않은 상태에서 해당 정보를 꼭 알고 싶을 때(생각: NULLable Database column) 사용하는 것이 유용할 수 있다.
변환할 이유가 없는 것 같다.boolean
로Boolean
추가 메모리 오버헤드, NPE 가능성 및 타이핑 감소.전형적으로 나는 어색함을 이용해서 내 삶을 조금 더 편하게 만든다.Boolean
.
이 존재의 유일한 이유는Boolean
의 컬렉션을 가질 수 있는 능력이다.Boolean
유형(세대에서는 허용되지 않음boolean
, 그리고 다른 모든 원시 요소들).
와, 도대체 뭐야?나만 그런 거야? 아니면 이 모든 대답이 잘못된 거야? 아니면 적어도 오해의 소지가 있는 거야?
부울 클래스는 부울 원시 유형을 둘러싼 래퍼다.이 포장지의 사용은 물체나 일반을 수용하는 방법으로 부울을 전달할 수 있도록 하는 것이다.즉 벡터.
부울 객체는 절대 null 값을 가질 수 없다.부울에 대한 참조가 null이면 부울이 생성되지 않았음을 의미한다.
유용할 수 있다: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Boolean.java
null 부울 참조는 다른 null 참조가 있는 유사한 논리를 트리거하는 데만 사용해야 한다.그것을 세가지 국가논리에 사용하는 것은 서툴다.
EDIT: 공지사항, 다음 사항Boolean a = true;
오해의 소지가 있는 진술이다.이것은 정말로 더 가까운 무언가와 같다.Boolean a = new Boolean(true);
http://en.wikipedia.org/wiki/Boxing_%28computer_science%29#Autoboxing에서 자동 복싱을 참조하십시오.
아마도 이곳이 혼란의 많은 부분인 것 같다.
편집2: 아래 의견을 읽어 보십시오.이것을 통합하기 위해 내 대답을 어떻게 재구성해야 할지 아는 사람이 있다면, 그렇게 하십시오.
세 가지 빠른 이유가 있다.
- 다음과 같은 데이터베이스 부울 값을 나타냄
true
false
또는null
- XML 스키마를 나타내다
xsd:boolean
으로 선언된 가치.xsd:nillable="true"
- 일반 유형을 사용할 수 있는 방법
List<Boolean>
- 사용할 수 없음List<boolean>
자신의 질문에 대한 대답: 나는 대답으로부터 많은 것을 배웠기 때문에 내 질문에 대답하는 것이 유용할 것이라고 생각했다.이 대답은 나와 같이 문제에 대한 완전한 이해를 가지고 있지 않은 사람들을 돕기 위한 것이다.만약 내가 잘못된 언어를 사용한다면 고쳐줘.
- null "값" 은 "값"과 .
true
그리고false
그것은 사물에 대한 포인터의 부재다.그러므로 부울이 3-값이라고 생각하는 것은 근본적으로 잘못된 것이다. Boolean의 구문은 축약되며 참조가 Objects를 가리킨다는 사실을 은폐한다.
Boolean a = true;
라는 사실을 숨기다true
하나의 대상이다.기타 동등한 할당은 다음과 같을 수 있다.
Boolean a = Boolean.TRUE;
또는
Boolean a = new Boolean(true);
약칭 구문
if (a) ...
대부분의 다른 과제와는 다르며, a가 객체 참조 또는 원시일 수 있다는 사실을 은폐한다.물체가 있는 경우 다음을 테스트할 필요가 있다.null
NPE를 피하기 위해.나에게 있어 만약 평등한 시험이 있다면 심리적으로 이것을 기억하는 것이 더 쉽다.
if (a == true) ...
무효 여부를 테스트하도록 유도될 수 있는 곳.그래서 짧아진 형태는 단지 안전할 때만 안전하다.a
원시인이다.
이제 나 자신을 위해 다음과 같은 권고사항을 가지고 있다.
- 3-값 논리에는 null을 사용하지 마십시오.참과 거짓만 사용하십시오.
- 절대 돌아오지 않음
Boolean
가능한 한 방법으로null
. 반환만boolean
. - 사용만
Boolean
용기에 요소를 감싸거나 객체가 필요한 메서드에 대한 인수를 포함함
원시양에 대한 래퍼 클래스는 객체가 필요한 경우 사용할 수 있으며, 컬렉션은 좋은 샘플이다.
어떤 이유에서인지 당신이 일련의 것들을 저장해야 한다고 생각해 보십시오.boolean
의 한 곳에.ArrayList
, 이것은 권투로 할 수 있다.boolean
에Boolean
.
여기에 이것에 대해 몇 마디가 있다.
원본 문서:
Java 프로그래머라면 누구나 알고 있듯이, 당신은 int(또는 다른 원시적 가치)를 컬렉션에 넣을 수 없다.컬렉션은 개체 참조만 포함할 수 있으므로 원시 값을 적절한 래퍼 클래스(int의 경우 정수)에 박싱해야 한다.컬렉션에서 개체를 꺼내면 삽입한 정수가 표시되며, int가 필요한 경우 intValue 방법을 사용하여 정수의 상자를 해제해야 한다.이 모든 권투와 언복싱은 고통스럽고, 당신의 코드를 혼란스럽게 한다.자동 복싱 및 언박스 기능은 프로세스를 자동화하여 통증과 잡음을 제거한다.
http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
Boolean
래퍼는 값이 할당되었는지 여부를 확인할 때 유용하다.true
그리고false
세 다음과 같은 세 가지 상태가 있다.
- 진실의
- 거짓의
- 정의되지 않은 항목
null
반면에boolean
다음 두 상태만 있음:
- 진실의
- 거짓의
위와 같은 차이는 리스트에서 도움이 될 것이다.Boolean
가질 수 있는 가치들True
False
또는Null
.
어떤 경우에는 이미 값을 설정했거나 설정하지 않은 부울 필드를 구별할 수 있는 메커니즘이 있어야 한다.
부울의 주 목적은 null 값이다.Null 값은 속성이 정의되지 않은 경우, 예를 들어 데이터베이스 Nullable 열을 사용하십시오.
모든 설정을 원시 부울에서 래퍼 부울로 변환해야 하는 경우 다음을 사용하여 이전 코드를 지원할 수 있다.
Boolean set = Boolean.FALSE; //set to default value primitive value (false)
...
if (set) ...
부울 래퍼에 **null** 값이 많이 사용된다! :)
예를 들어 사용자가 사이트의 뉴스레터를 원하는지 원하지 않는지를 나타내는 "뉴스레터"라는 필드를 사용할 수 있다.사용자가 이 필드에서 값을 선택하지 않을 경우, 해당 상황에 대해 기본 동작을 구현하는 것이 좋다(보내지 않는가?, 질문 다시? 등). 분명히 설정되지 않았음(또는 선택되지 않았음 또는 **null**)은 사실과 다르다.
그러나 "설정되지 않음"이 모델에 적용되지 않는 경우 부울 원시 값을 변경하지 마십시오.)
부울 요소에 대한 엄격한 정의에는 두 가지 값만 있다.완벽한 세상에서는, 그것은 사실일 것이다.현실 세계에서는 원소가 없어지거나 알려지지 않을 수도 있다.일반적으로 이것은 사용자 입력을 포함한다.화면 기반 시스템에서는 편집에 의해 강제로 실행될 수 있다.데이터베이스 또는 XML 입력을 사용하는 일괄 처리 세계에서는 요소가 쉽게 누락될 수 있다.
그래서 우리가 살고 있는 비완벽적인 세계에서는 부울 객체가 없어지거나 알려지지 않은 상태를 null로 나타낼 수 있다는 점에서 대단하다.결국, 컴퓨터는 단지 현실 세계를 모델링할 뿐이며, 가능한 모든 상태를 설명해야 하고 예외를 두는 것으로 처리한다(대부분 예외를 버리는 것이 올바른 대응일 수 있는 사용 사례가 있기 때문에).
나의 경우 입력 XML에 요소가 누락되어 있는 경우도 있고, 그래도 값을 얻어 부울에 할당하고 나서 null을 확인한 후 참 또는 거짓 테스트를 사용할 수 있기 때문에 부울 객체는 완벽한 답변이었다.
그냥 내 2센트야.
위의 모든 좋은 대답에 대해, 나는 단지 자바 서블릿에서 구체적인 예를 들려고 한다.HttpSession
이 가 당신이 있을 수 있는 을 명확히 이 되기를 이 예가 당신이 여전히 가지고 있을 수 있는 몇가지 질문을 명확히 하는데 도움이 되기를 바란다.
에 대한 및 해야 할 , 의의 을장하 고 을 setAttribute
(문자열, 객체) 및getAttribute
방법 (현, Object) 방법.따라서 부울 값의 경우, http 세션에 저장하려면 부울 클래스를 사용해야 한다.
HttpSession sess = request.getSession(false);
Boolean isAdmin = (Boolean) sess.getAttribute("admin");
if (! isAdmin) ...
에 마마지지가 .NullPointerException
속성 값이 설정되지 않은 경우(그래서 내가 이 직책을 맡게 된 것이다.)그래서 3개의 논리 상태는 여러분이 그것을 사용하는 것을 선호하든 원하지 않든, 여기 머물려고 한다.
부울은 당신이 세 개의 주가 필요할 때 매우 도움이 될 수 있다.소프트웨어 테스트에서 Test가 통과되면 transmiss true, 실패하면 false, 그리고 테스트 케이스가 중단된 경우 null로 테스트 케이스가 실행되지 않음을 나타낼 경우처럼.
모든 부울은 당신이 당신의 코드의 다른 어느 곳에 조건문을 가지고 있다는 것을 의미하기 때문에, 가장 좋은 방법은 완전히 술래를 피하는 것이다. (http://www.antiifcampaign.com/과 이 질문: if 문 없이 어떤 알고리즘을 쓸 수 있는가? 참조)
그러나 실용적으로 보면 가끔 술래를 써야 하지만, 이미 스스로 알아낸 바와 같이 술래를 상대하는 것은 오류가 더 많고 번거롭다.그래서 나는 가능한 한 어디든지 술집을 이용하는 것을 제안할 것이다.이러한 예외는 Nullable Boolean-columns가 있는 레거시 데이터베이스일 수 있지만, 내 매핑에서도 숨기려고 한다.
참조URL: https://stackoverflow.com/questions/11185321/when-should-null-values-of-boolean-be-used
'Programing' 카테고리의 다른 글
1D 또는 2D 어레이, 어떤 것이 더 빠른가? (0) | 2022.05.08 |
---|---|
정의되지 않은 VUEX의 '커밋' 속성을 읽을 수 없음 (0) | 2022.05.08 |
C++ 및 C에서 함수 매개 변수로 'const int' 대 'int const' (0) | 2022.05.08 |
Java로 UTF-8 파일을 작성하는 방법? (0) | 2022.05.08 |
중단점 목록을 저장하도록 GDB 가져오기 (0) | 2022.05.08 |