자바 연산자
산술연산자(Arithmetic Operator)
관계연산자(Relational Operator)
논리연산자(Logical Operator)
비트연산자(Bitwise Operator)
조건연산자(Conditional Operator)
할당연산자(Assignment Operator)
산술연산자
- 수치적인 연산을 하기 위한 연산자
- 단항연산자
++(전위) ++a 먼저 a에 1을 더하고 명령을 수행
--(전위) –a 먼저 a에서 1을 빼고 명령을 수행
++(후위) a++ 먼저 명령을 수행하고 1을 변수에 더함
--(후위) a-- 먼저 명령을 수행하고 1을 변수에서 뺌
- -b 현재 변수의 값의 부호를 바꾼다.
+ +b 변수의 현재 부호를 그대로 유지한다.
- 이항연산자
+,-,*,/,%
class Operation1 {
public static void main(String[] args) {
// 변수의 선언과 초기화
int a = 4, b = 2, c = -3;
// 후위 연산자 ++
System.out.println("a = " + a++);
// 전위 연산자 ++
System.out.println("a = " + ++a);
// 후위 연산자 --
System.out.println("b = " + b--);
// 전위 연산자 ++
System.out.println("b = " + --b);
// 부호 연산자 -
System.out.println("-a = " + -a);
// 부호 연산자 +
System.out.println("+c = " + +c);
System.out.println("a = " + a);
System.out.println("b = " + b);
c = a+++b;
System.out.println("a+++b = " + c );
System.out.println("a = " + a++);
//이항연산
a=9;b=3;c=0;
System.out.println("a + b =" + (a+b));
System.out.println("a - b =" + (a-b));
System.out.println("a * b =" + (a*b));
System.out.println("a / b =" + (a/b));
System.out.println("a % b =" + (a%b));
}
}
관계연산자
- 좌변과 우변의 관계를 파악하여 그 관계에 따라 참과 거짓의 값을 연산
> op1 > op2 op1이 op2보다 크면 결과값은 true
< op1 < op2 op1이 op2보다 작으면 결과값을 true
>= op1 >= op2 op1이 op2보다 크거나 같으면 true
<= op1 <= op2 op1이 op2 보다 작거나 같으면 true
== op1 == op2 op1과 op2가 같으면 true
!= op1 != op2 op1 과 op2 가 같지 않으면 true
class Operation2 {
int state;
public static void main(String[] args) {
Operator2 o1, o2, o3, o4;
o1 = new Operator2();
o1.state=1;
o4 = new Operator2();
o4.state=2;
o2 = o1; //객체의 참조값이 저장됨
o3 = o2;
if (o1 == o3) { System.out.println("o1과 o3는 같은 Object"); }
else { System.out.println("o1과 o3는 다른 Object"); }
if (o1.equals(o4)) { System.out.println("o1과 o4는 같은 Object"); }
else { System.out.println("o1과 o4는 다른 Object"); }
}
}
논리연산자
- 좌변과 우변의 논리적 관계를 나타내기 위한 연산자
&& op1 && op2 op1과 op2가 둘다 참이면 true, op1이 참인 경우에만 op2를 평가
|| op1 || op2 op1과 op2 둘 중 하나라도 참이면 true,
op1이 거짓인 경우에만 op2를 평가
! ! op op를 부정
& op1 & op2 op1과 op2가 둘다 참이면 true, op1과 op2 모두 평가
| op1 | op2 op1과 op2 둘 중 하나라도 참이면 true, op1과 op2 모두 평가
count = 0;
if ((++value%2==0) & ++count < limit)
이경우 & 대신 &&을 사용하면 왼쪽이 참인경우에만 count가 증가…
if (count > 0 && total/count > 5)
이경우 && 대신 &을 count에 혹시라도 0이 들어오면 o으로 나누는 형태가 되므로
오류발생
비트연산자
& op1 & op2 op1과 op2의 값을 비트 AND 연산한다.
| op1 | op2 op1과 op2의 값을 비트 OR 연산한다.
^ op1 ^ op2 op1과 op2의 값을 비트 XOR 연산한다.
>> op1 >> op2 op1을 op2만큼 우측으로 시프트
<< op1 << op2 op1을 op2만큼 좌측으로 시프트
>>> op1 >>> op2 op1을 op2만큼 우측으로 시프트
(시프트된 자리에 언제나 0이 삽입)
~ ~op1 보수(Complement)
조건연산자
- 피연산자를 3개 취하므로 3항 연산자라고도 한다.
- 논리식 ? 표현식1 : 표현식2
age = yourage > myage? yourage : myage
public class ConditionOperation {
public static void main(String[] args) {
int nHats=1;
System.out.println("I Have "+nHats + " hat" + (nHats==1?".":"s."));
nHats++;
System.out.println("I Have "+nHats + " hat" + (nHats==1?".":"s."));
}
}
할당연산자
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2
<<= op1 <<= op2 op1 = op1 << op2
>>= op1 >>= op2 op1 = op1 >> op2
>>>= op1 >>>= op2 op1 = op1 >>> op2
public class AllignOperation {
public static void main(String[] args) {
int i = 1;
// 할당연산자의 사용
System.out.println(i += 1);
System.out.println(i -= 3);
System.out.println(i *= 5);
System.out.println(i /= i);
System.out.println(i %= 2);
System.out.println(i &= 3);
System.out.println(i |= 10);
System.out.println(i ^= 4);
System.out.println(i <<= 1);
System.out.println(i >>= 2);
System.out.println(i >>>= 24);
}
}