학습한 내용을 토대로 작성한 글이며, 학습에 따라 추가 또는 변경될 수 있습니다.
잘못된 내용이 있으면 알려주세요....
연산자 종류
자료형 | 연산자 | 기능 | 반환 |
산술 연산자 | +, -, *, /, % | 사칙연산 및 나머지 연산 | 값 |
증감 연산자 | ++, -- | 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 |