연산자
연산자 종류와 우선 순위
| 우선순위 높음 |
우선순위 낮음 |
||
| 최우선 연산자 | 단항 연산자 | 이항 연산자 | 삼항 연산자 |
| ( ) , { } | + - ! (자료형) ++ -- ~ | 산술, 쉬프트(<<), 비교, 논리 | (조건식) ? 참 : 거짓 |
| 우선순위 높음 |
우선순위 낮음 | ||
| 산술 연산자 | 비교 연산자 | 논리 연산자(참, 거짓) | 대입 연산자 |
| * / % + - | > < >= <= == != | 비트 ( &, ^ , \ ) 일반( && , || ) | = += %= <<= &= ^= 등 |
증감 연산자: ++ , --
피연산자(연산자의 대상)의 값에 1을 더하거나 빼는 연산자.
전위 연산( ++a --a ): 먼저 연산 후 다른 연산 실행
후위 연산( a++ a-- ): 다른 연산 우선 실행 후 연산
※ 위치에 따라 결과 값이 다르게 나타나는 것 주의
int a = 10;
int b = ++a; // 전위 연산
system.out.println(a + ", " + b); // 결과는 11, 11
int a = 10;
int b = a++; // 후위 연산: 대입 연산이 먼저 실행되므로
System.out.println(a + ", " + b); // 결과는 11, 10
public void operatorTest() {
// 증감 연산자 연습하기
int a = 5;
int b = 10;
int c = (++a) + b; // a:6 b:10 c:16 (전위연산)
int d = c / a; // d:2
int e = c % a; // e:4
int f = e++; // f:4 e:5
int g = (--b) + (d--); // b:9 g:11 d:1
int h = 2;
h *= e; // h:10 대입 연산자. h에 e를 곱한 후 h에 대입.
System.out.println("a = " + a); //6
System.out.println("b = " + b); //9
System.out.println("c = " + c); //16
System.out.println("d = " + d); //1
System.out.println("e = " + e); //5
System.out.println("f = " + f); //4
System.out.println("g = " + g); //11
System.out.println("h = " + h); //10
}
결과
a = 6
b = 9
c = 16
d = 1
e = 5
f = 4
g = 11
h = 10
b = 9
c = 16
d = 1
e = 5
f = 4
g = 11
h = 10
단항 연산자
논리 부정 연산자: !
논리 값을 부정하여 반대 값으로 변경. true ↔ false. 제어문을 활용할 때 많이 쓰임
boolean bool1 = true;
boolean bool2 = !bool1;
System.out.println(bool2); // 결과 bool2: false
산술 연산자
일반 수학과 동일한 연산 방법, 우선순위를 가짐. %(Modular)는 나누기의 나머지 값
우선순위 1) *, /, % 2) +, -
/ 연산 시 형변환에 유의 (실수)
비교 연산자
a == b : a와 b가 같으면 true
a != b : a와 b가 다르면 true
두 개의 항을 비교. 데이터가 같은지, 다른지 비교할 때 쓰임. 논리값이 결과값. 참조형(String)을 포함한 모든 자료형을 비교할 때 사용 가능. ( 주소값이 같은지 여부를 비교하는 등 )
if(a == b) {} // a, b 같다면 if문 안의 내용 실행, 다르면 실행X
int result = a == b ? a++ : b --;
> , < , >= , <=
두 피연산자의 값의 크기 비교
크기를 비교할 수 없는 기본형 boolean과 참조형을 제외하고 나머지 자료형에 모두 사용 가능
※ => , =< 가 아님에 유의!!!
if(a < b) {}
int result = a > b ? a++ : b--;
for(int a = 0; a <= b; a++) {}
while(a >= b) {} // 다양한 제어문의 조건식에 활용됨
논리 연산자
논리 값 두 개를 비교하는 연산.
&& : 두 피연산자가 모두 true일 때 true 반환 (AND)
||: 두 피연산자 중 하나만 true여도 true 반환 (OR)
| a | b | a && b | a || b |
| true | true | true b값 추정 가능 |
true b값 추정 불가능 |
| true | false | false b값 추정 가능 |
true b값 추정 불가능 |
| false | true | false b값 추정 불가능 |
true b값 추정 가능 |
| false | false | false b값 추정 불가능 |
false b값 추정 가능 |
※ short cut: 명백하면 뒤의 값을 검사하지 않고 결과를 내어놓음. 즉 b에 해당하는 뒷쪽 항에 연산을 포함하여 기재했을 경우 short cut에 의해 뒤의 연산조차 실행되지 않을 수 있다는 점 유의
복합 대입 연산자
다른 연산자와 대입 연산자를 결합. 자기 자신과 연산 후 연산 결과를 자기자신에게 누적 대입
즉, a += 10 이면 a에 10을 더하고 그 값을 다시 a에 대입. a = a + 10.
| a += 10 | a = a + 10 |
| a -= 10 | a = a - 10 |
| a *= 10 | a = a * 10 |
| a /= 10 | a = a / 10 |
| a %= 10 | a = a % 10 |
간결한 코드 사용을 위해 익숙하게 숙지할 것.
실습 문제 풀이
package practice.operator;
public class OperatorPractice {
public void method1() {
// 문제 1 출력 값 예측
int num1 = 10, num2 = 0;
String str = "hello";
num1 += 20; // num1 : 30
num2 += 10; // num2 : 10
num1 /= num2; // num1 : 3
num2 *= num1; // num2 : 30
str += num2; // str : hello30
num2 -= num1; // num2 : 27
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);
System.out.println("str : " + str);
}
}
예상: 3, 27, hello+30(?)
결과
num1 : 3
num2 : 27
str : hello30
num2 : 27
str : hello30
public void method2() {
// 문제 2 삼항연산자 두개의 정수의 짝홀 판별
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 정수 입력 : ");
int num1 = sc.nextInt();
System.out.print("두 번째 정수 입력 : ");
int num2 = sc.nextInt();
String result = (num1 % 2 == 0) && (num2 % 2 == 0) ? "두 수 모두 짝수이다." :
(num1 % 2 == 0) || (num2 % 2 == 0) ? "하나는 홀수이고 하나는 짝수이다." :
"두 수 모두 홀수이다";
System.out.println(result);
}
결과
첫 번째 정수 입력 : 10
두 번째 정수 입력 : 11
하나는 홀수이고 하나는 짝수이다.
두 번째 정수 입력 : 11
하나는 홀수이고 하나는 짝수이다.
'TIL > JAVA' 카테고리의 다른 글
| Java 기초 - 반복문, 분기문 (0) | 2022.07.19 |
|---|---|
| Java 기초 - 조건문 (0) | 2022.06.20 |
| Java 기초 - 상수, 오버플로우, 형변환 (0) | 2022.06.15 |
| Java 기초 - 출력메소드, 입력받기 (0) | 2022.05.26 |
| Java 기초 - 변수(Variable) (0) | 2022.05.25 |