연산자는 필요로 하는 피연산자의 수에 따라 단항, 이항, 삼항 연산자로 구분
- 부호 연산자와 증감 연산자는 피연산자 하나만을 요구하므로 단항 연산자
- 조건 연산자는 조건식, A, B와 같이 3개의 피연산자가 필요하므로 삼항 연산자
- 그 외의 연산자는 2개의 피연산자를 요구하므로 모두 이항 연산자
<단항 연산자>
단항 연산자 : 피연산자가 단 하나뿐인 연산
1. 부호 연산자(+,-)
- 양수 및 음수를 표시하며, boolean 타입과 char 타입을 제외한 나머지 기본 타입에 사용 가능
- +와 -는 산술 연산자이기도 하고 부호 연산자이기도 하며, 부호 연산자로 쓰일 때에는 하나의 피연산자만 필요함
- 일반적으로 부호 연산자를 정수 및 실수 리터럴 앞에 붙여 양수 및 음수를 표현
- 변수 앞에 사용할 경우 변수 값의 부호를 유지하거나 바꿈(변수의 부호를 바꿀 시 타입을 고려해야 함)
public class SignOperatorExample {
public static void main(String[] args) {
int x = -100;
int result1 = +x;
int result2 = -x;
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
byte b = 100;
//byte result3 = -b; //컴파일 에러
int result3 = -b;
System.out.println("result3=" + result3);
}
}
결과 :
2. 증감 연산자(++,--)
- 변수의 값을 1 증가(++)시키거나 1 감소(--)시키는 연산자
- boolean타입을 제외한 모든 기본 타입의 피연산자에 사용 가능
- 증가 연산자(++) : 피연산자의 값에 1을 더해서 그 결과를 다시 피연산자에 저장
- 감소 연산자(--) : 피연산자의 값에서 1을 뺀 후 그 결과를 다시 피연산자에 저장
- 증가 연산자와 감소 연산자는 변수의 앞뒤 어디에든 올 수 있음
- 연산식에서 증감 연산자만 사용된다면 증감 연산자의 위치는 상관없음
- 연산식에서 다른 연산자와 함께 사용된다면 증감 연산자의 위치에 따라 연산식의 결과가 다르므로 주의해야 함
public class IncreaseDecreaseOperatorExample {
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
System.out.println("-----------------------");
x++;
++x;
System.out.println("x=" + x);
System.out.println("-----------------------");
y--;
--y;
System.out.println("y=" + y);
System.out.println("-----------------------");
z = x++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("-----------------------");
z = ++x;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("-----------------------");
z = ++x + y++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
결과 :
* ++i와 i=i+1의 속도 차이는 없다.
3. 논리 부정 연산자(!)
- 논리 부정 연산자는 true를 false로, false를 true로 변경하기 때문에 boolean타입에만 사용 가능
- 주로 조건문과 제어문에서 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 사용
- 두 가지 상태(true/false)를 번갈아가며 변경하는 토글(toggle) 기능을 구현할 때도 사용
public class DenyLogicOperatorExample {
public static void main(String[] args) {
boolean play = true;
System.out.println(play);
play = !play;
System.out.println(play);
play = !play;
System.out.println(play);
}
}
결과 :
<이항 연산자>
이항 연산자
: 피연산자가 2개인 연산자로, 산술 연산자, 문자열 결합 연산자, 비교 연산자, 논리 연산자, 대입 연산자 등이 있음.
1. 산술 연산자(+,-,*,/,%)
- 사칙연산과 나머지를 구하는 것까지 하여 총 5가지로 구성
- boolean타입을 제외한 모든 기본 타입에 사용 가능
- 피연산자가 byte, short, char 타입일 경우 모두 int타입으로 변환된 후에 연산 수행
- 피연산자들이 모두 정수 타입이고 long타입이 포함되어 있을 경우, 모두 long타입으로 변환된 후 연산 수행
- 피연산자 중 실수 타입(float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산 수행
public class ArithmeticOperatorExample {
public static void main(String[] args) {
int v1 = 5;
int v2 = 2;
int result1 = v1 + v2;
System.out.println("result1=" + result1);
int result2 = v1 - v2;
System.out.println("result2=" + result2);
int result3 = v1 * v2;
System.out.println("result3=" + result3);
int result4 = v1 / v2;
System.out.println("result4=" + result4);
int result5 = v1 % v2;
System.out.println("result5=" + result5);
double result6 = (double) v1 / v2;
System.out.println("result6=" + result6);
}
}
결과 :
<문자열 결합 연산자(+)>
문자열 결합 연산자(+)
: 문자열을 서로 결합하는 연산자
public class StringConcatExample {
public static void main(String[] args) {
String str1 = "JDK" + 6.0;
String str2 = str1 + " 특징";
System.out.println(str2);
String str3 = "JDK" + 3 + 3.0; //문자열 다음으로 숫자가 오므로 모두 문자열 처리
String str4 = 3 + 3.0 + "JDK"; //문자열 전에 숫자가 오므로 산술계한 후 문자열 처리
System.out.println(str3);
System.out.println(str4);
}
}
결과 :
<비교연산자(<,<=,>,>=,==,!=)>
비교 연산자
: 피연산자의 대소 또는 동등을 비교해서 true/false를 산출
- 대소 연산자는 boolean을 제외한 기본 타입에 사용 가능
- 동등 연산자는 모든 타입에 사용 가능
- 비교 연산자는 흐름 제어문인 조건문, 반복문에서 주로 이용되어 실행 흐름 제어
* 참고
0.1 == 0.1f 하였을 때 false 산출
그 이유는 실수의 저장 방식인 부동 소수점 방식이 0.1을 정확히 표현할 수 없기 때문
0.1f는 0.1의 근사 값(0.10000000149011612)으로 표현됨.
그러므로 피연산자를 모두 같은 타입으로 변환하여 비교하는 것이 좋음
<논리 연산자(&&,||,&,|,^,!)>
논리 연산자
: 논리곱, 논리합, 배타적 논리합, 논리 부정 연산을 수행하며 boolean타입만 사용할 수 있음
- &&와 &는 산출 결과는 같지만 연산 과정이 조금 다름(||와 |도 동일)
- &&앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false 산출
- &는 두 피연산자 모두를 평가해서 산출
<대입 연산자(=, +=, -=, *=, /=, %=)>
대입연산자
: 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장하며,
오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있음.
<삼항 연산자>
삼항 연산자(=조건 연산식)
: 3개의 피연산자를 필요로 하는 연산자로? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택
조건식을 연산하여 true가 나오면 삼항 연산자의 결과는 피연산자 2가 됨.
반면에 연산하여 false가 나오면 셜과는 피연산자 3이 됨.
public class ConditionalOperationExample {
public static void main(String[] args) {
int score = 85;
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
System.out.println(score + "점은 " + grade + "등급입니다.");
}
}
결과 :
'프로그래밍언어 > Java' 카테고리의 다른 글
04-2. for문, while문, do-while문 (0) | 2021.01.12 |
---|---|
04-1. if문, switch문 (0) | 2021.01.11 |
03-1. 연산자와 연산식 (0) | 2021.01.05 |
02-4. 변수와 시스템 입출력 (0) | 2021.01.04 |
02-3. 타입변환 (0) | 2020.12.30 |