Chapter 3. 연산자(Operator)
산술 연산자 : + - * / % << >> 사칙 연산과 나머지 연산(%)
비교 연산자 : > < >= <= == !=
논리 연산자 : && || !(not, 부정의 표현) ex) !(x>3)
대입 연산자 : =
기타 : (type) ?; instanceof 형변환 연산자, 삼항 연산자, instanceof연산자
- 연산자의 우선순위와 결합법칙
1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
3. 단항 연산자와 대입 연산자를 제외한 모든 연산은 왼쪽에서 오른쪽으로 진행한다.
- 증감 연산자
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.
전위형 : 값이 참조되기 전에 증가시킨다. ex) j = ++i;
후위형 : 값이 참조된 후에 증가시킨다. ex) j = i++;
(증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형의 차이가 없다)
- 형변환 연산자
형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
ex)
double d = 85.4;
int score = (int)d;
int score = (int)85.4;
int score = 85;
(d의 값이 변하는 것은 아니다)
- 자동 형변환
형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.
기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.

ex)
10 / 4.0f -> 10.0f / 4.0f -> 2.5f
(int가 float보다 범위가 작기 때문에 나눗셈을 하면 float로 자동 변환됨)
- 산술 변환
1) 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
long + int -> long + long -> long
float + int -> float + float -> float
double + float -> double + double -> double
2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. ★
byte + short -> int + int -> int
char + short -> int + int -> int
public class Ex3_9 {
public static void main(String[] args) {
int a = 1_000_000;
int b = 2_000_000;
long c = a * b; // a * b = 2,000,000,000,000
System.out.println(c); // 오버플로우 발생,
c = (long)a * b;
System.out.println(c); // 2,000,000,000,000
}
}
연산 결과가 integer 타입의 범위를 넘을 것 같으면 둘 중 한쪽을 큰 타입으로 형변환 해줘야 한다.
- 반올림
Math.round() - 실수를 소수점 첫째자리에서 반올림한 정수를 반환
public class Ex3_11 {
public static void main(String[] args) {
double pi = 3.141592;
// 3.142 값을 얻는 방법
System.out.println(pi);
System.out.println(pi*1000);
System.out.println(Math.round(pi*1000));
System.out.println(Math.round(pi*1000) / 1000.0);
// 3.141 값을 얻는 방법
System.out.println(pi*1000);
System.out.println((int)(pi*1000));
System.out.println((int)(pi*1000)/1000.0);
// double shortPi = Math.round(pi * 1000) / 1000.0;
// System.out.println(shortPi);
}
}
- 나머지 연산자 %
오른쪽 피연산자로 나누고 남은 나머지를 반환
나누는 피연산자는 0이 아닌 정수만 허용(부호는 무시됨)
System.out.println(10 % 8); // 10을 8로 나눈 나머지 2가 출력된다.
System.out.println(10 % -8); // 위와 같은 결과를 얻는다.
- 문자열의 비교
문자열 비교에는 == 대신 equals()를 사용해야 한다.
String str1 = “abc”;
String str2 = “abc”;
System.out.println(str1.equals(str2)); // true
- 논리 연산자 && ||
|| (OR결합) 피연산자 중 어느 한쪽이 true이면 true를 결과로 얻는다.
&& (AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
1) x는 10보다 크고 20보다 작다
x > 10 && x < 20 또는 10 < x && x < 20 으로 쓸 수 있다.
2) i는 2의 배수 또는 3의 배수이다.
i%2==0 || i%3==0
3) i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
(i%2==0 || i%3==0) && i%6!=0
(&&가 ||보다 우선순위가 높기 때문에 괄호를 사용했다. 괄호가 없으면 &&가 먼저 연산된다)
4) 문자 ch는 숫자(‘0’~‘9’)이다.
‘0’ <= ch && ch <=‘9’
문자 ‘0’은 유니코드로 48이고 ‘9’는 유니코드로 57, 즉 연속적으로 배치되어 있으므로 가능한 식이다.
5) 문자 ch는 대문자 또는 소문자이다.
(‘a’ <= ch && ch <= ‘z’) || (‘A’ <= ch && ch <= ‘Z’)
- 논리 부정 연산자 !
true를 false로, false는 true로 바꾼다.
boolean b = true;
!!b -> !!true -> !false -> true
문자 ch가 소문자가 아니다를 나타내면
ch < ‘a’ || ch > ‘z’ <-> !(‘a’ <= ch && ch <= ‘z’)
이와 같이 !를 사용하여 나타낼 수도 있다.
- 조건 연산자 ? :
조건식의 결과에 따라 연산결과를 달리한다.
result = (x > y) ? x : y ;
(x > y)가 참(true)이면 result는 x가 되고 거짓(false)이면 y가 된다.
- 대입 연산자
int x;
System.out.println(x=3); // 변수 x에 3이 저장되고
-> System.out.println(3); // 연산결과인 3이 출력된다.
★ 모든 연산자는 결과값을 반환한다 ★
x = 3에서 x는 lvalue, 3은 rvalue이다.
lvalue – 대입 연산자의 왼쪽 피연산자, 반드시 저장공간(변수, 배열)이어야 함
rvalue – 대입 연산자의 오른쪽 피연산자
- 복합 대입 연산자
i +=3; <-> i = i + 3; // 나머지 연산 메커니즘은 동일함. +자리에 - / * 등을 넣어서 사용
i *= 10 + j; <-> i = i * (10 + j); // 괄호가 존재하는 것을 주의해야 한다.
출처 : Youtube 남궁성의 정석코딩
출처 : Youtube 남궁성의 정석코딩
출처 : Youtube 남궁성의 정석코딩
'Java > Java의 정석' 카테고리의 다른 글
220304 Java - Chapter 5. 배열 (0) | 2022.03.04 |
---|---|
220303 Java - Chapter 4. 조건문 (0) | 2022.03.03 |
220301 Java - Chapter 2. 변수 (0) | 2022.03.01 |
220228 Java - Thread (0) | 2022.02.28 |
220225 Java - IO (0) | 2022.02.25 |