증감 연산자
증가 연산자(++) : 피연산자의 값을 1 증가시킨다.
감소 연산자(--) : 피연산자의 값을 1 감소시킨다.
증감 연산자에는 전위형과 후위형이 있으며 각 ++i; 와 i++; 의 형식으로 사용한다.
public class Main {
public static void main(String[] args) {
int i = 5, j = 0; // i와 j를 각각 5와 0으로 초기화
j = i++;
System.out.println("i = " + i); // i = 6
System.out.println("j = " + j); // j = 5
}
}
먼저 후위형을 살펴보자.
j = i++;은 j 에 현재의 i값을 대입한 후에 i에 i+1의 값을 저장하는 것이다.따라서 결과는 i = 6, j = 5가 나온다.
public class Main {
public static void main(String[] args) {
int i = 5, j = 0;
j = ++i;
System.out.println("i = " + i); // i = 6
System.out.println("j = " + j); // j = 6
}
}
다음으로 전위형을 살펴보자.
j = ++i는 현재의 i값에 1을 더한 후 그 그 결과를 j에 저장하는 것이다.따라서 결과는 i = 6, j = 6이 나온다.
사칙연산자
+, -, *, / 가 있으며 기존에 알고 있는 것처럼 나눗셈(/)과 곱셈(*)을 우선으로 처리한다.
0으로 나눌 수 없으며, 연산 결과의 타입은 형변환된 타입을 따른다는 것을 알아두자.
public class Main {
public static void main(String[] args) {
int a = 10, b = 4;
double c = 4;
System.out.println(a/b);
// int타입끼리의 연산이므로 결과값도 int타입이 되어 2가 나온다.
System.out.println(a/c);
// int타입을 double타입으로 나누어 결과값도 double타입이 되어 2.5가 나온다.
}
}
나머지 연산자
나머지 연산자(%)는 나눗셈을 한 나머지 값을 결과로 반환한다.
나눗셈과 마찬가지로 0으로 나눈 나머지를 구하는 것은 불가능하다.
주로 짝수, 홀수 또는 배수 검사 등에 사용된다.
public class Main {
public static void main(String[] args) {
int num1 = 10;
int num2 = 11;
System.out.println(num1%2);
// 10을 2로 나눈 나머지는 0이므로 num1은 짝수이다.
System.out.println(num2%2);
// 11을 2로 나눈 나머지는 1이므로 num2는 홀수이다.
}
}
대소비교 연산자
<, >, <=, >= 가 있으며 기존에 알고있는 대소비교와 같다. 결과를 true 나 false 로 반환한다.
boolean 타입을 제외한 나머지 기본 자료형에만 사용할 수 있다.
등가비교 연산자
==, != 가 있으며 두 수가 같은지 다른지를 비교하는 연산자이다.
기본형과 참조형 자료 모두 사용할 수 있다. 참조형의 경우 객체의 주소값을 비교하기 때문에, 두 개의 피연산자가 같은 객체를 가리키고 있는지 알 수 있다.
public class Main {
public static void main(String[] args) {
System.out.println(10 == 10.0f);
// true. int타입의 10이 float형으로 자동 형변환된다.
System.out.println('0' == 0);
// false. 문자 0과 숫자 0은 다르다. 참고로 문자 0은 48의 값을 가진다.
System.out.println('A' == 65);
// true. 문자 'A'는 아스키코드에서 65의 값을 가지기 때문에 같다.
System.out.println('A' > 'B');
// false. 'A'는 65, 'B'는 66이므로 'B'의 값이 더 크다.
System.out.println('A' + 1 != 'B');
// false. 'A' + 1 은 66으로 'B'의 값과 같다.
}
}
OR결합(||)
피연산자중 어느 한 쪽만 true면 true를 반환한다.
AND결합(&&)
피연산자중 양쪽 모두 true이어야 true를 반환한다.
논리 부정 연산자(!)
피연산자가 true면 false를, false면 true를 반환한다.
public class Main {
public static void main(String[] args) {
char ch = '5';
boolean tf = '0' <= ch && ch <= '9';
// '0' <= ch && ch <= '9'의 결과가 true나 false중 하나일것이므로
// boolean 타입의 변수 tf에 저장한다.
System.out.println(tf);
// 문자 5(아스키코드 53)는 문자 0(아스키코드 48)과 문자 9(아스키코드 57)
// 사이에 있으므로 true가 반환된다.
System.out.println(!tf);
// tf에 논리부정연산자 !를 붙여서 false가 반환된다.
}
}
조건연산자(? :)
조건식 ? 식1 : 식2 의 구조를 가지며 조건식이 참이면 식1이, 거짓이면 식2가 연산결과가 된다.
두개의 결과를 놓고 조건을 비교할 때는 조건연산자가 간편하지만 셋 이상의 결과중 선택해야 할때는 if문이 편리함과 가독성면에서 더 좋다.
public class Main {
public static void main(String[] args) {
int x = 5, y = 15;
System.out.println((x > y) ? x-y : y-x);
// 조건식의 괄호는 가독성을 위해 넣어주며 필수는 아니다.
// 조건식이 거짓이므로 y-x의 값인 10가 출력된다.
int result = (x > y) ? x-y : y-x;
System.out.println(result);
// 출력하려는 타입에 따라 값을 변수에 저장할 수 있다.
// 결과로 출력하려는 x-y 또는 y-x가 둘 다 int 타입 이므로 int result에 저장이 가능하다.
}
}
x = y 의 형식을 가지며 y의 값을 x라는 공간에 저장한다. y는 값이므로 변수나 식 상수등이 모두 가능하지만 x는 y라는 값을 담을 공간이므로 변수처럼 값을 변경할 수 있는 것이어야 한다. x = x + 3 을 x += 3과 같이 간략하게 줄여 사용할 수 있다.위의 연산자들은 1번부터 6번까지 순서대로 우선순위를 가지며 복합적으로 사용할때 우선순위에 주의한다.
단항연산자 > 산술연산자 > 비교연산자 > 논리연산자 > 삼항연산자 > 대입연산자