기록 저장소
[Java #4] Operator 본문
[ 연산자 (Operator) ]
* 괄호 연산자가 가장 높은 우선순위를 가지며, 대입 연산자가 가장 낮은 우선순위를 가짐
* ~ (틸드), 비트 논리 연산자는 넘어갈 예정. 특히 비트는 자바에서 쓸일 없음
1. 단항연산자
▷ 종류
- 변수++ : 선실행 후 1 증가
- ++변수 : 선 1 증가 후 실행
- +, - : 양수, 음수 기호
- ! : not 연산자. boolean에만 쓸 수 있음
- (자료형) : casting
▷ 예제
public class OperTest1
{
public static void main(String[] args)
{
int x = 10;
System.out.println(x);
System.out.println(x++);
System.out.println(--x);
System.out.println(x++);
System.out.println(++x);
System.out.println(x--);
System.out.println(--x);
System.out.println(x++);
System.out.println(x);
}
}
[ 형변환 ]
- 각 문자에는 아스키코드 값이 있기 때문에 숫자와 형변환이 가능하다.
cf. boolean의 경우 값은 true/false 뿐이기에 숫자와 형변환이 불가함
boolean b = true;
int z = b; //error
▷ 강제 형변환 : casting 연산을 통해 자료형을 변환시킴. 크기가 작은 자료형에 크기가 큰 자료형을 대입할 때 사용함
- 기본DT는 기본DT끼리, 참조DT는 참조DT끼리
- 값이 같은 형인 것만 변환 가능(ex. char와 int, int와 double은 가능 but, boolean과 int는 불가)
int z = 30;
double d = z;
//z = d; //error
z = (int) d;
char c = 'a';
System.out.println("(int)c == " + (int)c);
▷ 자동 형변환: 크기가 큰 자료형에 크기가 작은 자료형을 대입할 때 자동으로 형변환이 되어 에러 발생하지 않음
int y = c;
System.out.println("y == " + y);
* 컴파일 에러는 자바 문법이 틀렸을 경우 발생함
* casting operater는 단항연산자임
2.이항연산자
1) 산술연산자
▷ 종류 : +, -, *, /, %
▷ 예제
public class OperTest2
{
public static void main(String[] args)
{
int num1 = 13;
int num2 = 5;
int num3 = num1 + num2;
System.out.println(num1 + "+" + num2 + "=" + num1 + num2); // num1 + .... num1 이라는 문자열과 num2가 연결됨
System.out.println(num1 + "+" + num2 + "=" + (num1 + num2)); // (num1 + num2)가 산술연산되고, 앞의 문자열과 연결됨
num3 = num1 - num2;
System.out.println(num1 + "-" + num2 + "=" - num3);// 문자열을 - 할 수 없으므로 에러 발생함
System.out.println(num1 + "-" + num2 + "=" + (num1 - num2));
num3 = num1 * num2;
System.out.println(num1 + "*" + num2 + "=" + num3);
System.out.println(num1 + "*" + num2 + "=" + num1 * num2);// 사칙연산 순서에 따라 뒤의 *이 먼저 산술연산되고 앞의 문자열과 연결됨
num3 = num1 / num2;
System.out.println(num1 + "/" + num2 + "=" + num3);
System.out.println(num1 + "/" + num2 + "=" + num1 / num2);
num3 = num1 % num2;
System.out.println(num1 + "%" + num2 + "=" + num3);
System.out.println(num1 + "%" + num2 + "=" + num1 % num2);
}
}
- int끼리 연산 >> int / int와 double 연산 >> double
int discountRate = 30;
System.out.println(discountRate*10.0); //300.0
System.out.println(discountRate*10); //300
System.out.println(discountRate/10.0); //3.0
System.out.println(discountRate/100); //0
System.out.println(discountRate+10.0); //40.0
System.out.println(discountRate-10.0); //20.0
double discountRate = 30.0;
System.out.println(discountRate*10.0); //300.0
System.out.println(discountRate*10); //300.0
System.out.println(discountRate/10.0); //3.0
System.out.println(discountRate/10); //3.0
System.out.println(discountRate+10); //40.0
System.out.println(discountRate-10); //20.0
2) 비교연산자
- >, >=, <, <=, ==, !=
* 오라클과 달리 ^=, <> 는 없음
- instance of : 객체(object)의 type 비교
3) 논리연산자
* 비트 논리 연산자는 넘어갈 것!
- && : and
- || : or
* 자바에서의 Null 비교는 불가함
3. 삼항연산자
* if문에 비해 가독성은 떨어지지만, 문법검사를 하는 if문에 비해서는 속도가 빠름
다만, 의미가 있는 정도의 속도차이는 아님 (but, 삼항연산자를 선호하는 회사도 있다고 함)
▷ 조건(condition) ? 값1 : 값2;
>> 조건 true : 값1 / 조건 false : 값2
- 조건문 뒤에 실행문은 올 수 없음
* 실행문을 넣게 되면, 우선순위상 실행문 이후에 대입이 되므로
▷ 예제
public class OperTest4 {
public static void main(String[] args) {
int jumin = 2;
String gender = jumin % 2 == 0 ? "여자" : "남자";
System.out.println("주민번호가 " + jumin + "인 당신은 " + gender + "입니다.");
//점수가 80이상이면 합격, 불합격
//당신의 점수는 xx이므로 xx입니다.
int score = 80;
String result = score >= 80 ? "합격" : "불합격";
System.out.println("당신의 점수는 " + score + "이므로 " + result + "입니다.");
}
}
4. 대입연산자
▷ 일반대입연산 : =
▷ 연산 후 대입연산 : +=, -=, *=, /=, %=
- 'x = x + 5'는 연산이 두번 이루어짐. 같은 의미의 대입연산자를 사용하면 'x += 5' 한번의 연산으로 결과가 도출됨
- +=의 경우 문자열 연결에도 사용할 수 있음
▷ 예제
//x의 값을 1증가시키는 방법?
x = 10;
x = 10 + 1;
System.out.println(x);
x = 10;
x = ++x;
System.out.println(x);
x = 10;
x = x++;
System.out.println(x);
x = 10;
x += x;
System.out.println(x);
'kitri 노트 > java' 카테고리의 다른 글
[Java #6] 조건문_switch (0) | 2019.03.14 |
---|---|
[Java #5] 조건문_if (0) | 2019.03.14 |
[Java #3] variable & primitive type (0) | 2019.03.11 |
[Java #2] Java 파일 실행방법 & 주석 (0) | 2019.03.08 |
[Java#1] Java Setting (0) | 2019.03.08 |