강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CSS 속성
  • til
  • 메서드
  • 알고리즘 공부
  • 백준
  • 자바
  • CSS 박스 크기 설정
  • 메소드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

[Java] 연산자
Langauge/Java-basic

[Java] 연산자

2022. 7. 7. 22:34

학습한 내용을 토대로 작성한 글이며, 학습에 따라 추가 또는 변경될 수 있습니다.

잘못된 내용이 있으면 알려주세요....


연산자 종류

자료형 연산자 기능 반환
산술 연산자 +, -, *, /, % 사칙연산 및 나머지 연산 값
증감 연산자 ++, -- 1씩 증가 및 감소
비트 연산자 &, |, ~, ^ 비트 AND, OR, NOT, XOR
시프트 연산자 <<, >>, >>> 비트 단위 이동
비교 연산자 <, <=, >, >=, ==, != 크기 비교 논리
논리 연산자 &&, ||, !, ^ 논리 AND, OR, NOT, XOR
복합 대입 연산자 =, +=, -=, *=, /=, &=, |=, <<=, >>=, >>>=  산술 연산 결과 대입 실행
삼항 연산자 (조건) ? x : y if - else문과 동일 기능

산술 연산자

  • 산술 연산자는 사칙연산에 사용되는 연산자(+, -, *, /)와 나머지 연산자(%)가 있다.
  • 산술 연산자의 동작은 일반적인 수학 연산과 거의 동일하다.
  • 나머지 연산은 좌항의 값을 우항의 값으로 나눈 나머지를 반환하며 '모듈로 연산자'라고도 한다.
  • 나머지 연산자와 나누기 연산자를 사용할 때 우항에 0이 절대 위치할 수 없다.
  • 나머지 연산자를 사용할 때는 타입에 주의해야 한다. (정수형 / 정수형 = 정수형)
int result = 0;
result = 2 + 5 // result = 7;
result = 7 - 5 // result = 2;
result = 3 * 2 // result = 6;
result = 4 / 2 // result = 2;
result = 20 % 2 // result = 0;

// 주의!
// 0으로 나눌 때
int num1 = 2 / 0 // 에러(0으로 나눌 수 없다)
int num2 = 2 % 0 // 에러
double num1 = 2.0 / 0 // Infinity
double num2 = 2.0 % 0 // 에러
// 나머지 연산자 사용할 때
int num3 = 3 / 2 // num3 = 1 정수형 / 정수형 = 정수형
int num3 = 3 / (double)2 // 에러 (값은 double형 - 자료형은 int형)
double num3 = 3 / 2 // num3 = 1.0 정수형 / 정수형 = 정수형(데이터 손실 후 값 할당)
double num3 = 3 / (double)2 // num3 = 1.5

증감 연산자

  • 변수의 값을 1씩 증가시키거나 감소시키는 연산자를 증감 연산자라고 한다.
  • 증감 연산자는 실행의 우선순위에 따라 변수 앞에 붙는 '전위형'과 변수 뒤에 붙는 '후위형'으로 나눈다.
    • 전위형 증감 연산자 : 증감 연산을 먼저 수행한 후, 그 결과값을 적용한다.
    • 후위형 증감 연산자 : 값을 먼저 적용한 후 증감 연산을 수행한다.
// 기본
int num1 = 0;
num1 ++; // num1 = num1 + 1 (1)
++ num1; // num1 = num1 + num1 (2)

num1 --; // num1 = num1 - 1 (1)
-- num1; // num1 = num1 - 1 (0)

// 전위형 증감 연산자와 후위형 증감 연산자
int num2 = 0;
System.out.println(num2 ++); // 출력 : 0 
// 증감 연산자보다 출력문이 먼저 실행
// 즉, 출력이 먼저 실행되어 연산 전의 num2 값 0이 출력된 후 연산이 이루어진다.
System.out.println(num2); // 출력 : 1 

int num3 = 0;
System.out.println(++ num3); // 출력 : 1
// 출력문보다 증감 연산자가 먼저 실행
// 전위형 증감 연산자가 먼저 실행되어 num3 = num3 + 1 을 먼저 수행한 뒤 출력
System.out.println(num3); // 출력 : 1

복합 대입 연산자

  • 대입 연산자는 사칙 연산자와 함께 조합하여 복합 대입 연산자로 활용할 수 있다. (산술 연산의 축약)
  • 대입 연산자(=)는 다른 연산자와 조합될 때 항상 오른쪽에 위치한다.
산술 연산 축약
num1 = num1 + num2 num1 += num2
num1 = num1 - num2 num1 -= num2
num1 = num1 * num2 num1 *= num2
num1 = num1 / num2 num1 /= num2
num1 = num1 & num2 num1 &= num2
num1 = num1 | num2 num1 |= num2
num1 = num1 << num2 num1 <<= num2
num1 = num1 >> num2 num1 >>= num2
num1 = num1 >>> num2 num1 >>>= num2

비교 연산자

  • 비교 연산자는 연산 결과가 boolean타입(true, false)으로 평가될 수 있는 조건식에 사용된다.
    따라서 결과값도 boolean타입이 된다.
  • 비교 연산자는 크게 대소 비교 연산자(>, >=, <, <=)와 등가 비교 연산자(==, !=)로 분류된다.
    • 대소 비교 연산자 : 우항과 좌항의 크기 비교, 두개의 항만 비교 가능 (1 < x < 5와 같이 비교할 때는 논리연산자를 사용해야 함.)
    • 등가 비교 연산자 : 우항과 좌항이 같은지 비교, 비교 대상 : Stack Memory의 값 비교 !
      기본 자료형 - 스택 메모리 : 변수에 할당한 값이 저장 / 참조 자료형 - 스택 메모리 : 할당한 값의 힙 메모리 주소가 저장
// 대소 비교 연산자 (크기를 비교하는 연산자)
boolean bool;
bool = 5 > 3; // bool = true (5가 3보다 크니?)
bool = 5 >= 3; // bool = true (5가 3보다 크거나 같니?)
bool = 5 < 3; // bool = false (3이 5보다 크니?)
bool = 5 <= 3; // bool = false (3이 5보다 크거나 같니?)

// 등가 비교 연산자 (두 항의 값이 동등한지의 여부 체크)
boolean bool;
bool = 5 == 3 // bool = false (5와 3이 같니?)
bool = 5 == 5 // bool = true (5와 5가 같니?)
bool = 5 != 5 // bool = false (5와 5가 다르니?)
bool = 5 != 3 // bool = true (5와 3이 다르니?)

// 등가 비교 연산자
// 문자열 할당
String msg1 = "딸기";
String msg2 = "딸기";
System.out.println(msg1 == msg2);
// 출력결과 : true
/*
직접 문자열을 생성하면 "딸기"라는 문자열이 힙 메모리 영역에 저장되고 msg1은 "딸기"라는 문자열의
주소값을 저장한다. 그 후 msg2에서 동일한 문자열 "딸기"를 할당하려 하면 힙 메모리에 "딸기"와 동일한
문자열이 있는지 확인한 후 있으면 "딸기"의 주소값을 그대로 msg2에 저장하기 때문에 등가 비교를 해도
true가 나오는 것이다. 기본 연산자는 스택 메모리 변수 내에 바로 값이 저장되기 때문에 상관 X
*/
// 객체 생성
String msg3 = new String("사과");
String msg4 = new String("사과");
System.out.println(msg3 == msg4);
// 출력 결과 : false
/*
객체를 생서하면 힙 메모리 영역에 객체가 생성되고 그 후 msg3과 msg4에는 그 객체에 대한 
주소값이 할당되는데 객체를 2개를 만들었으니 각 객체의 위치는 서로 다를 것이다.
그렇기 때문에 등가 비교 연산자를 이용해 변수 내의 값(주소)를 비교하면 false가 출력되는 것이다.
/*

논리 연산자

논리 연산자는 피연산자로 boolean값(true 또는 false)만 올 수 있고, boolean값을 반환한다.

  • AND 연산자(&&) : 피연산자 두 개 모두 true일 때만 true를 반환하며, 한 개라도 false가 있을 경우 false를 반환한다.
  • OR 연산자(||) : 피연산자 두 개 중에 한 개라도 true일 경우 true를 반환하며, 모두 false일 경우 false를 반환한다.
  • XOR 연산자(^) : 피연산자가 서로 다를 경우 true를 반환하며, 같을 경우 false를 반환한다.
    (true, false는 중요하지 않다. 단지 같은가 다른가만 비교한다.)
  • NOT 연산자(!) : true일 경우 false를 반환하며, false일 경우 true를 반환한다. (불리언값을 반대로 바꾸는 연산자)

boolean isTrue;
System.out.println("=== AND연산자 ===");
isTrue = true && true;
System.out.println("true && true = " + isTrue);
isTrue = true && false;
System.out.println("true && false = " + isTrue);
isTrue = false && false;
System.out.println("false && false = " + isTrue);

System.out.println("=== OR연산자 ===");
isTrue = true || true;
System.out.println("true || true = " + isTrue);
isTrue = true || false;
System.out.println("true || false = " + isTrue);
isTrue = false || false;
System.out.println("false || false = " + isTrue);

System.out.println("=== XOR연산자 ===");
isTrue = true ^ true;
System.out.println("true ^ true = " + isTrue);
isTrue = true ^ false;
System.out.println("true ^ false = " + isTrue);
isTrue = false ^ false;
System.out.println("false ^ false = " + isTrue);

System.out.println("=== NOT연산자 ===");
isTrue = !(true && true);
System.out.println("!(true && true) = " + isTrue);
isTrue = !(true && false);
System.out.println("!(true && false) = " + isTrue);

 

 

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 배열  (0) 2022.07.11
[Java] 제어문 (조건문 / 반복문 / 제어키워드)  (0) 2022.07.08
[Java] 자료형(Type)  (0) 2022.07.05
[Java] 리터럴 (Literal)  (0) 2022.07.05
[Java] 변수  (0) 2022.07.04
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 배열
    • [Java] 제어문 (조건문 / 반복문 / 제어키워드)
    • [Java] 자료형(Type)
    • [Java] 리터럴 (Literal)
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바