1. 연산자(operator)
1.1 연산자와 피연산자
- 연산자는 피현산자로 연산을 수행하고 나면 항상 결과값을 반환한다.
1.2 연산자의 종류
종류 | 연산자 |
산술 연산자 | +, -, *, /, %, <<, >> |
비교 연산자 | >, <, ≥, ≤, =, != |
논리 연산자 | &&, |
대입 연산자 | = |
기타 | (type), ?:, instanceof |
1.3 연산자의 우선순위와 결합규칙
3 + 4 - 5;
x = y = 3;
종류 | 결합규칙 | 연산자 | 우선순위 |
단한 연산자 | ←——————— | ++, —, +, - , ! , !, (type) | 높음 |
산술 연산자 | ———————→ | (*, /, %) > (+, -), > (<<, >>) | |
비교 연산자 | ———————→ | (<, >, ≤, ≥, instanceof) > (==, ≠) | |
논리 연산자 | ———————→ | & > ^ > | > && > |
삼항 연산자 | ———————→ | ?: | |
대입 연산자 | ←——————— | =, +=, -=, *=, /=, %=. <<=, >>=, &=, ^=, | = |
2. 단항 연산자
2.1 증감 연산자 ++ --
전위형 후위형
타입 | 설명 | 사용 예 |
전위형 | 값이 참조되기 전에 증가시킨다 | j = ++i; |
후위형 | 값이 참조된 후에 증가시킨다 | j = i++; |
- 수식이나 메서드 호출에 포함되지 않고 단독으로 쓰이는 경우 차이가 없다
- i++;
- ++i;
class OperatorEx2 {
public static void main(String[] args) {
int i=5, j =5;
j = i++; // 값을 참조 후 i 를 1 증가시킴
System.out.println("j=" + j + ", i=" + i);
i=5;
j=5;
j = ++i; // i를 1 증가시킨 후 값 참조
System.out.println("j=" + j + ", i=" + i);
}
}
Result :
j=5, i=6 j=6, i=6
3. 산술 연산자
- 유의점
- 나누기 연산자의 두 피연산자가 모두 int 타입일 경우, 연산 결과 역시 int 타입이다.
4. 비교 연산자
- 두 피 연산자를 비교하는데 사용되는 연산자다.
- 연산 결과는 true / false 중에 하나이다
4.1 대소비교 연산자 < > ≤ ≥
4.2 등가비교 연산자 ==, !=
비교 연산자 | 연산결과 |
== | 두 값이 같으면, true 아니면 false |
!= | 두 값이 다르면, true 아니면 false |
문자열의 비교
class OperatorEx23 {
public static void main(String[] args) {
String str = new String("abc");
boolean result = str.equals("abc");
System.out.println(result);
}
}
- 비교연산자 ‘==’ 대신 equals()라는 매서드를 사용해야 한다.
class OperatorEx23 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = new String("abc");
System.out.printf(("str1 == str2 ? %b%n"), str1 == str2);
System.out.printf(("str1.equals(\\"abc\\") ? %b%n"), str1.equals("abc"));
System.out.printf(("str2.equals(\\"abc\\") ? %b%n"), str2.equals("abc"));
}
}
- str2는 new를 사용해서 새로운 객체를 만든 것이므로, str1과 같은 값을 가지지만 서로 다른 객체이기 때문에 ‘false’ 값이 출력된다.
- 따라서 equals를 사용해주어야 값으로만 비교가 가능하다.
5. 논리 연산자 - &&, ||, !
- ex) x는 10보다 크고, 20보다 작사
x > 10 && x < 20
10 < x && x < 20 //가독성 측면에서 이 식이 더 나을 수 있다.
- i 는 2의 배수 또는 3의 배수이다
i % 2 == 0 || i % 3 == 0
- i 는 2의 배수 또는 3의 배수지만 6의 배수는 아니다
(i % 2 == 0 || i % 3 = 0) && i % 6 != 0
→ 괄호를 사용한 이유는 %% 연산자가 || 보다 우선순위가 높기 때문이다.
- 문자 ch는 숫자 (’0’ ~ ‘9’)이다.
'0' <= ch && ch <= '9'
→ 유니코드로 ‘0’ ~ ‘9’까지 연속적으로 배치되어 있다.
- 문자 ch는 대문자 또는 소문자이다
('a' <= ch && ch < 'z') || ('A' <= ch && ch <= 'Z')
효율적인 연산
- x 가 true 이면 x || y 는 항상 true이다.
- x가 false이면, x&&y는 항상 false이다
('a' <= ch && ch < 'z') || ('A' <= ch && ch <= 'Z')
→ 다음과 같은 식에서 연산 결과가 참이 나올 확률이 높은 식을 좌측에 두면 연산속도가 빨라진다
사용자가 소문자를 입력할 확률이 높으므로 좌측에 배치한다.
논리부정 연산자 !
- true를 false, false를 true로 반환
- ch 는 소문자가 아니다
ch < 'a' || ch > 'z' // 이 식으로 표현하는 것 보단
!('a' <= ch && ch <= 'z') //으로 표현하는 것이 이해가 쉽다
5. 그 외 연산자
5.1 조건 연산자 ?:
- 조건식의 평가결과가 true이면 식 1이, false이면 식 2가 연산결과가 된다
result = (x > y) ? x : y; // (x > y) 결과가 true이면 result에 x가, false이면 y가 저ㅈ장
if (x > y)
result = x;
else
result = y;
- 위의 두 코드는 결과가 동일하나 조건 연산자를 사용하면 보다 간단하게 코딩이 가능하다.
중첩
result = x > 0 ? 1 : (x == 0 ? 0 : -1);
→ 다음과 같이 중첩 조건문 처럼 사용할 수 있으나 2번 이상 사용할 경우 가독성이 떨어진다.
'Java > Java 스터디' 카테고리의 다른 글
Chapter 06. 객체지향 프로그래밍 I (part 1~2) (0) | 2023.02.21 |
---|---|
Chapter 05. 배열 (0) | 2023.02.15 |
Chapter 04. 조건문과 반복문 (0) | 2023.02.15 |
Chapter 02. 변수 (1) | 2023.01.12 |
Chapter 01. 자바 스터디 시작 (1) | 2023.01.03 |