생활코딩

Coding Everybody

코스 전체목록

닫기

비교와 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. 20200320
  2. 수고했어오늘도
    2020-03-14 완료
  3. 초보
    그런 것 같아요 뭔가 새로운 문자열로 인식하는 것 같구(즉 기존과 다른 새로운 문자열)
    다른 항목(묶음이라는 계념)이라기 보단 그냥 독립적으로 다른 문자열로 인식하게 만드는 것 같아요
    a,b 모두 new String으로 잡아봤는데 false로 나오더군요
    .equals()는 계급장때고 비교하게 만드는 명령어 같구요
    대화보기
    • 흐무
      2020.02.28 완료
      ==는 서로의 값을 비교하는 비교연산자이고 .equals는 문자열을 비교할때사용한다.
      인스턴스 생성자와의 주소값이 다르기때문에 false가 나오게 된다.
    • 쿨라임
      String a = "Hello world";
      String b = new String("Hello world");
      여기서 a == b 가 false로 나오는 이유는 String 객체에 대해서 JVM의 메모리할당 방식이 다르기 때문입니다.

      String a = "Hello world"로 할당하게 되는 경우에는 Heap안에 있는 String Constant Pool영역에 할당이 되게된다. String b = new String("Hello world")로 할당하게 되는 경우에는 Heap내의 String Constant Pool영역이 아닌 Heap내의 어딘가에 하나의 "Hello world"라는 객체로 할당

      여기서 a와 b객체의 내용은 같지만 가르키고있는 객체가 각각 다른 객체이기때문에 a == b는 false가 나오는 것입니다.

      String에 대한 추가적인 내용...
      String a = "Hello World";
      String b = "Hello World";
      이렇게 선언을 하게되면 a,b객체는 SCP(String Constant Pool)내에 Hello World로 동일한 두 객체가 할당될 것 같지만 그렇지 않습니다. SCP내에는 동일한 문자열에 대해서 하나의 Hello World객체로만 할당되며 a와 b는 동일한 레퍼런스를 가지게 되는 것입니다.
    • 베이비유저<baby user>
      2020/02/17 min 완
    • 자바를자바
      ==이랑 .equals의 이해에는 어려움이 느껴진다.
    • 과연다볼수있을까?
      200105 완료
    • 매직램프
      감사합니다!!
    • 이재우
    • 엘비
      20191031 완료
    • 허공
      감사합니다!
    • 그 두 개가 다른 것이 아니라, 그 두 개를 담기 위해 사용된 객체가 달라서 false가 출력된게 아닐까 생각됩니다.
      대화보기
      • 워나
        2019/10/05 완료
      • ㅁㄴㅇㅁㄴㅇ
        String a = "Hello world";
        String b = new String("Hello world");
        System.out.println(a == b);
        이것이 false이유는 "Hello world"와 new String("Hello world")이 다르기 때문이죠?
      • PassionOfStudy
        190906 Note
        * 비교와 Boolean
        불린(Boolean)은 참과 거짓을 의미하는 데이터 타입으로 bool이라고도 부른다. 불린은 정수나 문자와 같이 하나의 데이터 타입인데, 참을 의미하는 true와 거짓을 의미하는 false 두 가지의 값을 가지고 있다.

        대표적 ==, !=, >, <, >=, <= 있다.
      • 콩지니
        2019-09-03
        수강완료
      • 홍주호
        20190901 완료
      • doevery
        수강완료
      • 다나가
        190816 수강완료!!!!!
      • 김혜민
        비교 연산자는 나중에 배울 제어문에서 꼭 필요한 존재입니다.
        꼭 숙지하세요.

        ==와 .equal의 차이점은,

        a == b 의 경우
        a와 b라는 변수가 같냐? (값 말고 변수 자체) -> 아니오, a는 a지 b가 아닙니다.
        a == a의 경우 true.

        a.equal(b)의 경우
        a에 있는 값과 b에 있는 값이 같냐? -> 예, a에 들어있는 값과, b에 들어 있는 값은 같습니다.

        좋은 강의 감사합니다.
      • 강민진
        String a와 String b 모두 "Hello world"는 같은 메모리 공간을 가리키겠죠?
        C와 마찬가지로 자바도 문자열 상수인 "Hello world"가 어떤 메모리 공간에 저장되어 있을테니까. 1)??
        그래서 ==로 비교하면 같다는 것이 나온다는 것은. 같은 메모리 공간, 대상을 가리킨다는 뜻으로 쓰이는 것? 2)??
        그리고 String b = new String("Hello world");라고 하면
        원래는 문자열 상수 "Hello world"가 저장된 곳에서 받아온다? 가리킨다? 그곳에 있는 "Hello world를 활용하겠지만, new String 을 사용하면 새로운 메모리 공간에 Hello world를 만들어 그것을 b에 저장한다고 이해해도 되는 걸까요?
        결론적으로
        a.equals(b)는 문자열의 내용이 같냐를 판단하는 것이고,
        a == b는 문자열이 같은 메모리 공간을 가리키고 있는 지를 판단하는 것이라고 이해해도 되나요?
      • Hyeon-Jun Ha
        감사합니다
      • 얼그레이
        감사합니다 :) equals의 사용법을 어서 알고 싶네요 ㅎㅎ 20190629
      • 6/17시작
        6/18 완료
      • 감사합니다 ^^
      • 목단비국화차
        완료
      • 김동현
        감사합니다
      • ZANYABI
        비교와 Boolean
        Boolean이란?
        데이터타입의 일종으로, 출력되는 값이 'true' 'false' 두가지 뿐인것이 특징


        비교연산자
        = : 예로 a=1 이면 a에 1을 대입하는 연산자이다.
        == : 비교연산자로 좌항과 우항의 값이 같으면 true, 다르면 false를 출력한다.
        != : 부정을 의미한다. 위와 정반대의 경우.
        >, >= : 수학에서의 부등호와 완전히 같다.
        .equals : 숫자가 아닌 문자열을 비교할때 사용한다. == 과 같은 역할을 하나 문자열에 사용한다.
      • 라또마니
        감사합니다. 이해 했어요~
      • anteater
        님들님들

        package org.opentutorials.javatutorials.operator;

        public class operator {

        public static void main(String[] args) {

        int a = (int)3.0F;
        float b = (float)3.0;

        System.out.println(a==b);
        }

        }
        ----->>>> true 모르는 사람들을 위한 이전 데이터 타입 이해 꿀팁
      • 잠만보
        a.equals(b);
      • 개구리
        아자아자 화이팅
      • j-graphy
        2019. 2. 1. 학습완료
      • 더티팬더
        18.12.05
      • 전민희
        2018.10.01 완료
        = 대입연산자
        == 비교연산자
        != 같지않다 not 이라는 뜻, 1!=2 는 "true"
        .equals 문자열을 비교할 때 사용하는 메소드
      • 0.0765496432598578
        js 에서도 new String("1")==new String("1")을 하면 false가 나오네요
      • Daydream
        20180910 완료 감사합니다.
        ==
        !=
        a.equal(b)
        >
        <
        <=
        >=
      • 이지선
        2018.08.29 완료~
      • 백선우
        20180828 완료!
      • Kelly
        8/23?완료
      • 진영
        8/11 완료
      • 전하연
        감사합니다 ^^
      • 감자감자
        완료
      • 다블스타
        완료
        메소드에서 고생좀 하겠네요
      • 완료
      • 컹스맨
        완ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ료
      • Jaebeom Lee
        완료
      • 전민희
        완료
      • 멀캠A_Son
        완료
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기