이항 연산자는 피연산자가 2개인 연산자를 말한다.
문자 결합 연산자인 +
는 문자열을 서로 결합하는 연산자이다. +
연산자는 산술 연산자
, 부호 연산자
인 동시에 문자열 결합 연산자
이기도 하다. 피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 서로 결합한다.
단, 연산순서에 따라 결과값이 다르게 나오니 주의할 필요가 있다.
String str2 = "JDK" + 3 + 3.0 // "JDK33.0"
String str3 = 3 + 3.0 + "JDK" // "6.0JDK"
비교 연산자는 피연산자의 대소(<, <=, >, >=)
또는 동등(==, !=)
을 비교해서 true, false를 산출한다. 비교 연산자는 흐름 제어문인 조건문, 반복문에 주로 이용되어 실행 흐름을 제어할 때 사용된다.
만약, 피연산자가 char 타입이면 유니코드 값으로 비교 연산을 수행한다.
('A' < 'B') ➡️ (65 < 66)
비교 연산자에서도 연산을 수행하기 전에 피연산자의 타입을 일치 시킨다.
'A' == 65 ➡️ 65 == 65 // true
: char 타입이 int 타입으로 변환되어 비교하는 예시
3 == 3.0 ➡️ 3.0 == 3.0 // true
: int타입이 double타입으로 변환되어 비교하는 예시
❗️주의 할 점 (0.1 == 0.1f
동등비교)
실수의 저장 방식인 부동 소수점 방식은 0.1을 정확히 표현할 수 없다. 0.1f는 0.1의 근사값(0.10000000149011612)으로 표현되며 0.1보다 큰 값이 되어 버린다. 이런 경우 피연산자를 모두 float 타입 혹은 정수 타입으로 변환해서 비교한다.
int v2 = 1;
double v3 = 1.0;
v2 == v3 // true
double v4 = 0.1;
float v5 = 0.1f;
(float)v4 == v5 // true
논리 연산자는 논리곱(&& 또는 &), 논리합(|| 또는 |), 배타적 논리합(^), 논리 부정(!) 연산을 수행한다. 논리 연산자의 피연산자는 boolean 타입만 사용할 수 있다.
&&
와&
는 산출 결과는 같지만 연산과정이 조금 다르다.&&
는 앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false라는 산출 결과를 낸다. 그러나&
는 두 피연산자를 모두를 평가해서 산출 결과를 내기 때문에 & 보다는 &&이 더 효율적으로 동작한다. 이는||
와|
에도 마찬가지로 적용되며||
은 앞의 피연산자가 true라면 뒤의 피연산자를 평가하지 않고 바로 true라는 산출 결과를 낸다.
대입 연산자는 모든 연산자들 중 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행되며 연산의 진행 방향이 오른쪽에서 왼쪽으로 진행된다.
Ref.
책: 혼자 공부하는 자바