Java

비교와 Boolean

프로그래밍의 비교나 불린은 이것만으로는 효용이 크지 않다. 후속 수업인 반복문과 조건문에서 그 효용이 드러나기 때문에 조금 지루하더라도 조건문까지만 인내하자.

Boolean

불린(Boolean)은 참과 거짓을 의미하는 데이터 타입으로 bool이라고도 부른다. 불린은 정수나 문자와 같이 하나의 데이터 타입인데, 참을 의미하는 true와 거짓을 의미하는 false 두 가지의 값을 가지고 있다. 아래는 비교 연산자들에 대한 설명이다.

비교 연산자 (관계 연산자)

프로그래밍에서 비교란 주어진 값들이 같은지, 다른지, 큰지, 작은지를 구분하는 것을 의미한다. 이때 비교 연산자를 사용하는데 비교 연산자의 결과는 true나 false 중의 하나다. true는 비교 결과가 참이라는 의미이고, false는 거짓이라는 뜻이다. 

==

좌항과 우항을 비교해서 서로 값이 같다면 true 다르다면 false가 된다. '='이 두 개인 것을 주의하자. '='이 하나인 것은 대입 연산자로 우항의 값을 좌항의 변수에 대입할 때 사용하는 것으로 의미가 완전히 다르다. (실행)

package org.opentutorials.javatutorials.compare;

public class EqualDemo {

    public static void main(String[] args) {
		System.out.println(1==2);           //false
		System.out.println(1==1);           //true
		System.out.println("one"=="two");   //false
		System.out.println("one"=="one");   //true
	}

}

!=

'!'는 부정을 의미한다. '같다'의 부정은 '같지 않다'이다. 이것을 기호로는 '!='로 표시한다. 아래의 결과는 !=의 결과인데 ==와 정반대의 결과를 보여준다. (실행)

package org.opentutorials.javatutorials.compare;

public class NotDemo {

    public static void main(String[] args) {
		System.out.println(1!=2);      		//true
		System.out.println(1!=1);			//false
		System.out.println("one"!="two");	//true	
		System.out.println("one"!="one");	//false
	}
	
}

>

좌항이 우항보다 크다면 참, 그렇지 않다면 거짓임을 알려주는 연산자다. '<'는 반대의 의미로 언급은 생략하겠다. (실행)

package org.opentutorials.javatutorials.compare;

public class GreaterThanDemo {

    public static void main(String[] args) {
		System.out.println(10>20);      	//false
		System.out.println(10>2);			//true
		System.out.println(10>10);			//false

	}

}

>=

좌항이 우항보다 크거나 같다. '<='는 반대의 의미로 언급은 생략하겠다. (실행)

package org.opentutorials.javatutorials.compare;

public class GreaterThanOrEqualDemo {

    public static void main(String[] args) {

		System.out.println(10 >= 20); // false
		System.out.println(10 >= 2); // true
		System.out.println(10 >= 10); // true

	}

}

.equals

.equals는 문자열을 비교할 때 사용하는 메소드다. 우리는 아직 메소드를 배우지 않았기 때문에 지금은 그냥 이것을 연산자로 이해해도 무방하다. 아래는 문자와 문자를 비교하는 방법이다. (실행)

package org.opentutorials.javatutorials.compare;

public class EqualStringDemo {

    public static void main(String[] args) {
		String a = "Hello world";
		String b = new String("Hello world");
		System.out.println(a == b);
		System.out.println(a.equals(b));
	}

}

변수 a와 b에 각각 문자열을 생성해서 저장했다. 변수 b에 문자열을 만드는 방법은 생성자를 이용하고 있는데 이 방법은 후에 객체 지향 시간에 배우게 된다. 지금은 new String의 괄호 안에 문자열을 넣으면 문자열을 생성할 수 있다고만 알아두자. 결과는 false와 true이다. ==은 두개의 데이터 타입이 동일한 객체인지를 알아내기 위해서 사용하는 연산자이기 때문에 b에 담긴 객체와 일치하지 않는 것이다. 이를 보안하는 비교 방법이 equals이고 이를 이용해서 서로 다른 객체들간에 값이 같은지를 비교할 수 있다. 이 이야기는 지금 단계에서는 이해하기 다소 어려움이 있다. 문자와 문자를 비교할 때는 '=='를 사용하지 않고 .equals를 사용한다고 일단은 알아두자.

댓글

댓글 본문
작성자
비밀번호
  1. ljn425
    감사합니다.
  2. Ryan.L
    감사합니다.!
  3. 504번째 시청자 입니다.
    미드보다 재밌네요 ㅎ ^^
  4. 잘듣고 있습니다~ 감사합니다ㅜㅜ
  5. 이태경
    자바 강의 정말 잘 듣고 있습니다.
  6. 핫칠리
    '=='와 .equals의 차이점에 대한 자세한 설명이 되어 있는 글이 있어서 공유합니다.
    http://hoit89.tistory.com......als
  7. 좋은강의 감사합니다!
  8. 감사하비
    감사하비
  9. JustStudy
    고맙습니다
  10. yskioi
    감사합니다.
  11. 김도준
    아직 진도를 더 나가보면 확실해지겠지만,
    추측으로는, "one"이란것은 변수가 아니라서 그런것 같습니다.
    단순히 상수를 비교하는 것이라고 해야하나요?
    string a
    string b
    이렇게 변수형태를 따로 지정했을때 .equals 를 쓴다는 말 같군요.
    대화보기
    • Devani0310
      감사합니다
    • 오빠는다르다
      감사합니다!!!!!!!!
    • 기초에 충실하자
      String a = "Hello";

      String b = new String("Hello");

      a와 b는 서로 다른 데이터형의 객체입니다. 이를 비교하려면 equals를 사용해야 한다는 것이죠.

      문자와 문자 비교는 equals를 사용한다는 정도만 아셔도 큰 무리는 없습니다. a와 b는 서로다른 데이터형의 객

      체이지만 문자(열)를 담고 있으니까요.
      대화보기
      • panda_90
        문자열을
        a = "Hello world"
        b = "Hello world" 라고 아예 똑같이 해서
        "a == b" 를 하니까 true 가 되네요.

        밑에 분들이 one은 왜 연산자로 비교 되냐고 해서 그냥 한번 해봤는데, 비교가 되는걸 보니
        그냥 아예 똑같으면 숫자 문자 가리지 않고 비교가 되는건가.. 하고 이해하고 갑니다.

        밑에 수업들 더 들어가면서 차차 이해하겠죠?
      • 아솔
        잘 보고 있습니다. 감사합니다.
        그런데 one은 == 연산자로 비교할 수 있는데,
        hello world는 비교할 수 없는 이유는 무엇인가요?
      • Byunghawk Lee
        흠 다음 강의로...
        수고하셨습니다
      • 현팡
        정주행중입니다
      • 허니버터
        잘보고 갑니다
      • 1123
        와 ㅋㅋ "one" == "one" 신박
      • user0123
        PHP 를 거의 완벽하게 한 다음
        자바 하니까 그냥 다 아는 내용만 나오네요.

        .equals 이것만 몰라서 이쪽만 좀 자새히 들여다 보았습니다^^
      • 김도현
        아주 명확히 이해가 되는건 아니지만
        덕분에 조금 더 이해됐습니다.
        감사합니다!
        대화보기
        • kkh847@gmail.com
          감사합니다. 더 열심히 공부하겠습니다. ^.^
          대화보기
          • egoing
            심지어 권장합니다!
            대화보기
            • 은빛사자
              공부를 위해 개인블로그에 개인적으로 일부를 발췌해서 올리면 저작권에 문제가 되는지요?
              요즘 공부를 위해서 개인 블로그에 일부만 발췌해서 정리를 하는 경우도 있는데 출처를 밝히고 공개해도 되는지요?
            • 자바입문생초보자
              메모장에서 확인 결과

              false
              true

              나오는데요?
              대화보기
              • moby
                package org.opentutorials.javatutorials.compare;

                public class EqualStringDemo {

                public static void main(String[] args) {
                String a = "Hello world";
                String b = new String("Hello world");
                System.out.println(a == b);
                System.out.println(a.equals(b));
                }

                }

                여기서 둘다 false로 나오는디유?
              • 디지
                String도 == 로 비교 가능합니다.

                String a = "Hello world";
                String b = "Hello world";

                인 경우 a, b 둘다 "Hello world" 라는 객체를 가르킵니다.
                그렇기 떄문에 == 는 양쪽의 객체가 같기 때문에 true로 표시 됩니다.

                하지만
                String a = "Hello world";
                String b = new String("Hello world");

                의 경우는 b는 새로운 객체를 만들어 Hello world를 저장했기 때문에
                a와 b가 가르키는 객체가 다릅니다.

                그렇게 떄문에 == 에서 false로 나옵니다.
              • 콜드스톤
                정확하지는 않지만 제 생각에는 Boolean자체가 데이터타입 중 하나이고 정수든 문자든 문자열이든 비교를 할 수 있는 것 같습니다. 질문하시는 분께서 아마 Boolean은 정수 데이터 타입이라고 생각하시는 것 같습니다
                대화보기
                • 질문!
                  위에 있는 "One" 과 "Two" 는 문자열이 아닌가요?? 그냥 정수를 달리 표현한 방법인가요?? 그래서 ==로 비교가 가능한건가...??
                • Beginner
                  도움이 많이 되고 있습니다. 정말 감사합니다!
                  P.S. 오른쪽 아래에서 셋째 줄에 오타가 있어요~
                  "보안 --> 보완"으로 고쳐야 될 것 같습니다.
                • LeSix
                  우와 도움이 되어서 기쁘네요! : )
                • egoing
                  빙고! 수정했습니다. 알려주셔서 감사합니다!
                  대화보기
                  • LeSix
                    질문 드립니다.

                    =연산자 설명에서

                    "대입 연산자로 좌항의 값을 우항의 변수에"가 아니라

                    "우항의 값을 좌항의 변수에 대입"이

                    올바른 설명인거 아닌가요?

                    갑자기 헷갈려서 질문드립니다 ㅠ
                  • 누리짱
                    아래는 문자와 문자를 비교하는 방법이다.
                    -->
                    아래는 문자열과 문자열을 비교하는 방법이다.
                    로 수정해야 한다고 생각합니다.
                  • egoing
                    불린으로 통일했습니다. 감사합니다.
                    http://en.wiktionary.org......ean
                    대화보기
                    • dawndream
                      블린(Boolean) 이란 용어가
                      http://opentutorials.org....../79
                      이쪽 페이지에는 불리언으로 되어 있습니다.
                    버전 관리
                    egoing
                    현재 버전
                    선택 버전
                    graphittie 자세히 보기