JAVA
연산자(Operator)
hohahihi
2023. 3. 2. 19:40
부호 연산자
연산자 | 연산식 | 설명 |
+ | +i | 양수 부호(피연산자의 부호 유지) |
- | -i | 피연산자의 값을 음수로 변경 |
- + 연산자는 잘 사용되지 않음
- 부호를 변경하는 것도 연산에 해당되므로 정수 타입에서 - 연산자를 사용한 결과 값은 int 타입이 된다.
산술 연산자
연산자 | 연산식 | 설명 |
+ | x + y | 더하기 |
- | x - y | 빼기 |
* | x * y | 곱하기 |
/ | x / y | 나누기 |
% | x % y | 피연산자를 나눈 나머지 연산 |
- 정수와 문자열이 "+"로 결합되면 정수가 문자열로 변환된다.
- 정수 나누기 정수는 결과도 정수이다. (나눈 몫만 결과로 저장되고, 소수점 이하는 버려진다.)
- 산술 연산 시 정확한 결과를 얻기 위해서는 실수보다 정수 타입을 사용하는 것이 좋다.
- 실수 타입을 부동 소수점 방식으로 표현하기 때문에 발생하는 문제
예) 1 - 7*0.1 = 0.29999999999999993
0 나누기와 NaN, Infinity 처리
- 피연산자가 모두 정수 타입일 때 나누기(/), 나머지(%) 연산 시 분모가 0이면 무한대를 정수로 표현할 수 없기 때문에 예외(ArithmeticException)가 발생한다.
- 실수 타입의 피연산자가 포함된 나누기(/), 나머지(%) 연산 시 분모가 0.0(f)이면 예외가 발생하지 않지만 결과가 Infinity(0.0으로 / 연산) 또는 NaN(0.0으로 % 연산)이 된다.
- 이후 다른 연산을 수행해도 Intinity와 NaN은 그대로 유지되기 때문에 연산을 수행하는 의미가 없어진다. - 실수 나누기 연산의 결과가 Infinity인지 확인하려면 Double.isInfinite() 메소드를 사용하고, NaN인지 확인하려면 Double.isNaN() 메소드를 사용한다.
- 매개변수의 값이 Infinity 또는 NaN 이면 true를, 아니면 false를 리턴하는 메소드.
관계 연산자(비교 연산자)
관계 연산자 : 피연산자의 동등 여부 및 값의 크기를 비교하는 연산자
연산자 | 연산식 | 설명 |
== | x == y | 피연산자의 값이 같은지 확인 |
!= | x != y | 피연산자의 값이 다른지 확인 |
> | x > y | 좌측 피연산자의 값이 우측보다 큰지 확인 |
>= | x >= y | 좌측 피연산자의 값이 우측보다 크거나 같은지 확인 |
< | x < y | 좌측 피연산자의 값이 우측보다 작은지 확인 |
<= | x <= y | 좌측 피연산자의 값이 우측보다 작거나 같은지 확인 |
- 관계 연산자의 결과는 boolean 타입이다. (true/false)
- 비교는 항상 왼편을 기준으로 비교한다.
- 부등호는 왼쪽에 작성한다. (<=, >=)
자료형이 다른 연산자 간 비교 연산
- 피연산자의 자료형이 다를 경우 비교 연산 수행 전에 자료형일 일치시킨다.
ex) char 타입의 'A'와 int 타입의 65를 == 연산자로 비교 시 'A'는 int 타입의 65로 변환되어 연산을 수행
ex2) double 타입의 3.0과 int 타입의 3을 == 연산자로 비교 시 3은 double 타입의 3.0으로 변환되어 연산을 수행
실수 자료형의 비교 연산
- float 자료형과 double 자료형의 비교 연산 시 각 자료형의 정밀도 차이로 인해 예상과 다른 결과가 나올 수 있다.
ex) 0.5f == 0.5 → false
float 자료형과 double 자료형을 비교할 때는 double 자료형을 float로 강제 형변환한 후 연산을 수행하면 된다.
문자열의 동등 비교
- 문자열을 비교할 때는 == 연산자 대신 equals() 메소드를 사용해야 올바른 결과를 얻을 수 있다.
- 문자열(String)은 참조 타입이기 때문에 == 또는 != 연산자를 사용하면 값이 저장된 주소에 대한 비교 연산을 수행한다.
String str1 = "Hello";
String str2 = "hello";
boolean result = str1.equals(str2); //false
|
논리 연산자
논리 연산자 : 연산의 대상 및 결과가 참과 거짓 둘 개의 값 중 하나를 취하는 연산
- AND, OR, NOT, XOR, NOT 등의 논리 연산을 수행
- 두 개의 조건을 하나로 만들 때 사용
연산자 | 연산식 | 설명 |
& | x & y | 논리곱(AND) 연산 - 피연산자가 모두 true일 떄만 true |
&& | x && y | |
| | x | y | 논리합(OR) 연산 - 피연산자 중 하나라도 true이면 true |
|| | x || y | |
^ | x ^ y | 배타적 논리합(XOR) 연산 - 피연산자의 논리값이 서로 다른 경우에만 true |
! | !x | 논리 부정(NOT) 연산 - 피연산자의 논리값을 변경(true → false, false → true) |
※ &(|) 연산자와 &&(||) 연산자의 차이
- & 연산자는 양쪽 피연산자를 모두 확인한 다음 결과를 산출
- && 연산자는 앞의 피연산자의 논리값이 true이면 뒤의 피연산자를 확인하지 않고 바로 true로 판단
- 앞의 피연산자가 false이면 바로 false로 판단
- | 와 || 연산자도 동일한 방식으로 동작한다.
- &&(||) 연산자가 &(|) 연산자보다 효율적인 방식으로 동작한다.
AND (둘 다 true일 때만 결과가 true)
a | b | R |
T | T | T |
T | F | F |
F | T | F |
F | F | F |
OR (둘 중에 하나만 true여도 결과는 true)
a | b | R |
T | T | T |
T | F | T |
F | T | T |
F | F | F |
XOR(두 값이 서로 다를 때만 true)
a | b | R |
T | T | F |
T | F | T |
F | T | T |
F | F | F |
증감 연산자
증감 연산자 : 값을 일정하게 증가하거나 감소시키는 연산자
연산자 | 연산식 | 설명 |
++ | ++i | 연산을 수행하기 전에 피연산자의 값을 1 증가 |
i++ | 다른 연산을 수행한 다음에 피연산자의 값을 1 증가 | |
-- | --i | 연산을 수행하기 전에 피연산자의 값을 1 감소 |
i-- | 다른 연산을 수행한 다음에 피연산자의 값을 1 감소 |
대입 연산자
연산자 | 연산식 | 설명 |
= | x = 1 | 우측 피연산자의 값을 좌측 피연산자(변수)에 저장 |
- 좌측 피연산자에는 변수만 가능하고, 우측 피연산자는 변수와 리터럴 값, 연산식 모두 가능하다.
복합 대입 연산자
복합 대입 연산자 : 대입 연산자에 다른 연산자를 붙여서 연산 수행 결과를 바로 변수에 대입하는 연산자
연산자 | 연산식 | 설명 |
+= | x += 2 | 좌측 변수의 값에 우측 피연산자의 값을 더한 후 다시 변수에 저장 |
-= | x -= 2 | 좌측 변수의 값에서 우측 피연산자의 값을 뺀 후 다시 변수에 저장 |
*= | x *= 2 | 좌측 변수의 값과 우측 피연산자의 값을 곱한 후 다시 변수에 저장 |
/= | x /= 2 | 좌측 변수의 값을 우측 피연산자의 값으로 나눈 후 다시 변수에 저장 |
%= | x %= 2 | 좌측 변수의 값을 우측 피연산자의 값으로 나눈 나머지를 변수에 저장 |
&= | x &= y | 좌측 변수의 값을 우측 피연산자의 값과 논리곱 연산 수행한 결과를 변수에 저장 |
|= | x |= y | 좌측 변수의 값을 우측 피연산자의 값과 논리합 연산 수행한 결과를 변수에 저장 |
^= | x ^= y | 좌측 변수의 값을 우측 피연산자의 값과 배타적 논리합 연산 수행한 결과를 변수에 저장 |
삼항(조건) 연산자
- (true/false로 반펼 가능한 조건식) ? (true일 때의 결과 값) : (false일 떄의 결과 값)
- 첫 번째 항의 조건을 판별하여 true이면 두 번째 항을 결과로 취하고, false이면 세 번째 항을 결과로 취한다.
- 엑셀의 IF() 함수의 사용법과 비슷하다.
연산 우선순위
우선순위 | 연산자 | 연산 방향 |
1 | 증감(++, --), 부호(+, -), 비트(~), 논리(!) | ← |
2 | 산술(*, /, %) | → |
3 | 산술(+, -) | → |
4 | 쉬프트(<<, >>, >>>) | → |
5 | 비교(<, >, <=, >=, instanceof) | → |
6 | 비교(==, !=) | → |
7 | 논리(&) | → |
8 | 논리(^) | → |
9 | 논리(|) | → |
10 | 논리(&&) | → |
11 | 논리(||) | → |
12 | 조건(?:) | → |
13 | 대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=) | ← |