1. 연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + -*/% | 사칙 연산과 나머지 연산(%) |
비교 연산자 | ><>=<= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && | | ! & | A^~ | and와 or 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ?: instanceo | 형변환 연산자, 삼항 연산자, instanceof연산자 |
2. 연산자의 결합규칙
- 산술 〉 비교 〉 논리 〉 대입 순서로 대입 연산자는 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
3. 증감 연산자 ++와 --
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소++i; //
++i ; 전위형 : i의 값을 1 증가시킨다.
i++; 후위형 : 값이 참조된 후에 증가시킨다.
class Ex {
public static void main(String args[]) {
int i=5, j=0;
j = i++;
System.out.println("j=i++; 실행 후, i=" + i +", j="+ j);
i=5; // 결과를 비교하기 위해, i와 j의 값을 다시 5와 0으로 변경
j=0;
j = ++i;
System.out.println("j=++i; 실행 후, i=" + i +", j=" +j);
}
}
4. 형변환 연산자
형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것이다.
double d = 85.4;
int score = (int)d; //int로 형변환
5. 자동형변환
표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다. 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.
byte b = 1000; // 에러. byte타입의 범위(-128 〜 127)를 벗어난 값의 대입
byte b = (byte)1000; // OK. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.
6. 산술 변환
(1) 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
long + int ㅡ> long + long ㅡ> long
float + int ㅡ> float + flaot ㅡ> float
double + float ㅡ> double + double ㅡ> double
(2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
byte + short ㅡ> int + int ㅡ> int
char + short ㅡ> int + int ㅡ> int
class Ex {
public static void main(String args[]) {
long a = 1_000_000 * 1_000_000;
long b = 1_000_000 * 1_000_000L;
System.out.println("a="+a); // a = -727379968 오버플로우 발생!!
System.out.println("b="+b); // b = 1000000000000
}
}
7. 나머지 연산자 %
나머지 연산자는 나누는 수로 음수도 허용한다.
class Ex {
public static void main(String[] args) {
System.out.printin(-10%8); // -2
System.out.printin(10%-8); // 2
System.out.printin(-10%-8); // -2
}
}
8. 비교 연산자
대소비교연산자 〈, 〉, 〈, =, 〉, =
등가비교 연산자 ==, !=
문자열 비교에서 equals()는 두 문자열의 내용이 같으면 true, 다르면 false를 결과로 반환
class Ex {
public static void main(String[] args) {
String strl = "abc";
String str2 = new String("abc");
System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc"=="abc"); // true
System.out.printf("\"strl==\"abc\" ? %b%n"? "abc"=="abc"); // true
System.out.printf(" str2==\"abc\" ? %b%n", str1=="abc"); // false
System.out.printf("strl.equals(\"abc\") ? %b%n", strl.equals("abc")); // true
System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc")); // true
System.out.printf("str2.equals(\"ABC\") ? %b%n", str2. equals("ABC")); // false
System.out.printf("str2. equalsIgnoreCase(\"ABC\") ? %b%n", str2.equalsIgnoreCase("ABC")); // true
}
}
9. 논리 연산자
II (OR결합) 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다.
&& (AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
(1) x는 10보다 크고, 20보다 작다. => 10 < x && x < 20
(2) i는 2의 배수 또는 3의 배수이다. => i%2==0 || i%3==0
(3) i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다. => ( i%2==0 || i%3==0 ) && i%6!=0
(4) 문자 ch는 숫자('0'~'9')이다. => '0' <= ch && ch <= '9'
- 논리 부정 연산자
ch < ’a' || ch > 'z' 와 !('a' <= ch && ch <= 'z')는 같은 의미이다.
class Ex {
public static void main(String[] args) {
boolean b = true;
System.out.printf("b=%b%n", b); // true
System.out.printf("!b=%b%n", !b); // false
System.out.printf("!!b=%b%n", !!b); // true
}
}
'자바' 카테고리의 다른 글
자바 정리 - (2) 배열 (0) | 2023.01.16 |
---|---|
자바 정리하기 - (1) 변수 (0) | 2023.01.10 |
댓글