1. 연산자
연산자
: 연산을 수행하는 기호 (*, +)
피연산자
: 연산자의 연산 수행 대상 (9, x, 3)
모든 연산자는 연산결과를 반환한다.
즉, 연산결과를 반환하지 않으면 연산자가 아니다.
연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙 연산과 나머지 연산(%) |
비교 연산자 | < > >= <= == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && || ! & | ^ ~ | '그리고(AND)' 와 '또는(OR)' 으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 연산 |
(type) ?: instanceof
|
형변환 연산자, 삼항 연산자, instanceof연산자 |
연산자의 우선순위
public class Operator1_1 {
public static void main(String[] args) {
int x = 10;
int y = 20;
// + 연산자는 피연산자가 2개인 이항 연산자임으로 단항 연산자인 -x의 -가 먼저 실행됨
System.out.println("-x + 3 = ");
System.out.println(-x + 3); // -10 + 3 = -7
System.out.println("x + 3 * y = ");
System.out.println(x + 3 * y); // 10 + (3 * 20) = 70
System.out.println("x + 3 > y - 2 = ");
System.out.println(x + 3 > y - 2); // false
System.out.println("x + 3 < y - 2 ");
System.out.println(x + 3 < y - 2 ); // true
System.out.println("x > 3 && y < 2 = ");
System.out.println(x > 3 && y < 2); // false
int result = x + y * 3;
System.out.println("result = " + result); // 10 + (20 * 3), result = 70
}
}
2. 증감 연산자
증가 연산자(++)
: 피연산자의 값을 1 증가시킴
감소 연산자(--)
: 피연산자의 값을 1 감소시킴
전위형
: 값이 참조되기 전에 증가/감소 시킴
후위형
: 값이 참조된 후에 증가/감소 시킴
public class Operator2_1 {
public static void main(String[] args) {
int k = 0, j = 3;
// 후위형
k = j++;
System.out.println("k = j++;, k = " + k);
System.out.println("k = j++;, j = " + j);
// 값 초기화
k = 0;
j = 3;
// 전위형
k = j++;
System.out.println("k = ++j;, k = " + k);
System.out.println("k = ++j;, j = " + j);
}
}
- 증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형 차이 없음
(ex; ++k; k++; → 이런 경우 두 개의 값 동일)
3. 부호연산자
- '-' 는 피연산자의 부호를 반대로 변경
public class Operator2_2 {
public static void main(String[] args) {
int i = -10;
i = +i;
System.out.println("i = +i; = " + i);
i = -10;
i = -i;
System.out.println("i = -i; = " + i);
}
}
4. 형변환 연산자
형변환
: 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
public class Operator3_1 {
public static void main(String[] args) {
int i = 65, num = 10;
char ch = 'A';
float f = 1.6f;
System.out.println("(char)i = " + (char)i);
System.out.println("(int)ch = " + (int)ch);
System.out.println("(int)f = " + (int)f);
System.out.println("(float)num = " + (float)num);
}
}
5. 자동 형변환
- 작은 타입을 큰 타입에 저장시 컴파일러에 의해 자동으로 형변환이 됨
- 큰 타입을 작은 타입에 저장시 에러 발생. 그래서 수동으로 형변환 해줘야 함
public class Operator3_2 {
public static void main(String[] args) {
float f1 = 1234; // int < float 이기 때문에 가능. 컴파일러에 의해 자동 형변환된 것.
float f2 = (float)1234;
// int i = 3.14f; // int < float 이기 때문에 에러 발생.
// int -> float 될 때, 소수점 사라지면서 원래 값이 달라짐.
// 값 손실이 발생하는 경우에는 컴파일러가 자동으로 형변환 안해줌.
int i = (int)3.14f; // 직접 수동으로 형변환 해줘야 함.
// " 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환됨 "
// 큰 타입을 작은 타입에 저장
System.out.println("i = " + i);
byte b = 100;
System.out.println("b = " + b); // 자동 형변환
int num = 100;
//byte b2 = num; // error
byte b2 = (byte)num;
System.out.println("b2 = " + b2);
//byte b3 = 1000; // 범위 넘어가 error 발생
byte b3 =(byte)1000;
// 위의 경우 오류는 발생하지 않지만 값 손실 발생.
// " 상수여도 값 손실이 일어나면 자동 형변환 불가능 "
System.out.println("b3 = " + b3); // b3 = -24
}
}
6. 사칙 연산자
: + - * /
public class Operator4_1 {
public static void main(String[] args) {
int a = 10, b = 4;
// 덧셈
System.out.println("a + b = ");
System.out.println(a + b);
// 뺄셈
System.out.println("a - b = ");
System.out.println(a - b);
// 곱셈
System.out.println("a * b = ");
System.out.println(a * b);
// 나눗셈
// 소수점 이하는 버려짐
System.out.println("a / b = ");
System.out.println(a / b);
// 10 / 4.0f -> 10.0f / 4.0f -> 2.5
System.out.println("a / (float)b = ");
System.out.println(a / (float)b);
}
}
7. 산술변환
: 연산 전, 피연산자의 타입을 일치시키는 것
- 두 피연산자의 타입을 같게 일치시킴 (큰 타입으로 일치)
- long + int → long + long => long
- float + int → float + float => float
- double + float → double + double => double
- 피연산자의 타입이 int 보다 작은 경우 int로 변환됨
- byte + short => int
- char + short => int
public class Operator4_2 {
public static void main(String[] args) {
char ch ='2';
// 문자 '2'는 숫자로 50, '0'은 48이기 때문에 int 타입으로 자동변환되어 50 - 48 = 2
System.out.println("ch - '0' = ");
System.out.println(ch - '0'); // 2
int a = 1_000_000; // 1백만
int b = 2_000_000; // 2백만
// a * b = 2_000_000_000_000 -> 10^12
// long 에 저장하려는 것은 맞지만 a * b의 결과 타입이 int
// 이미 계산을 할 때 오버플로우 발생. 따라서 계산을 할 때 형변환 필요
long l = (long)a * b;
// long * int -> long * long => 1_000_000L * 2_000_000 -> 1_000_000L * 2_000_000L
System.out.println("l = " + l);
}
}
'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글
[Java Handbook] Part 3-1 (0) | 2023.09.12 |
---|---|
[Java Handbook] Part 2-2 (0) | 2023.09.12 |
[Java Handbook] Part 1-4 (0) | 2023.09.11 |
[Java Handbook] Part 1-3 (0) | 2023.09.11 |
[Java Handbook] Part 1-2 (0) | 2023.09.11 |