자바가 제공하는 다양한 연산자를 학습하세요.
🟢 completed 🟡 in progress ⚪ not done
연산자는 1, 2, 3항의 피연잔자에 대해 특정한 연산을 수행하고 결과를 생성하는 기호이다. 연산자의 종류와 피연산자는 그 피연산자에 수행되는 연산의 종류와 생성되는 결과의 종류를 결정한다.
자바의 연산자는 두 기준으로 분류할 수 있다:
+(덧셈), -(뺄셈), *(곱셈), /(나눗셈) 과 같은 연산자를 산술 연산자라고 한다.
숫자형 피연산자와만 사용할 수 있다. 즉, 산술 연산자에 대한 피연산자는 반드시 byte, short, char, int, long, float, double 중 하나여야 한다.
산술 연산자는 boolean형이나 참조형 피연산자를 가질 수 없다.
단항 연산자
public class Ex02{
public static void main(String[] args){
byte sum=1+2;
int sub=10-5;
long multi=100*200;
float division=6.5f/2;
double remain=7.5%2;
System.out.println("sum="+sum);
System.out.println("sub="+sub);
System.out.println("multi="+multi);
System.out.println("division="+division);
System.out.println("remain="+remain);
}
}
sum=3
sub=5
multi=20000
division=3.25
remain=1.5
비트연산자는 피연산자 각각의 비트를 조작한다. 자바는 여러가지 비트연산자를 정의하고, 이 연산자들은 정수유형인 long, int short, char, byte의 에 적용된다.
| 연산자 | 설명 |
|---|---|
& | 이진 AND 연산자(비트곱 연산자)는 양쪽의 값이 1일 때만 연산결과를 1로 반환 |
ㅣ | 이진 OR 연산자(비트합 연산자)는 둘 중 하나의 값만 1이어도 연산결과를 1로 반환 |
^ | 이진 XOR 연산자는 양쪽 값이 다를 경우에만 연산결과를 1로 반환 |
~ | 이진 NOT 연산자는 피연산자 값의 반대값을 반환 |
<< | 이진 Left Shift 연산자는 왼쪽 피연산자값을 연산자 오른쪽에서 지정한 수만큼 왼쪽으로 이동, 비어있는 비트를 0으로 채운다. |
>> | 이진 Right Shift 연산자는 왼쪽 피연산자 값을 연산자 오른쪽에서 지정한 수만큼 오른쪽으로 이동, 부호비트를 이용해서 비어있는 비트를 채운다. 예를 들어, 피연산자의 수가 양수이면 0으로, 음수이면 1로 채운다. |
>>> | Shift right zero fill 연산자는 >> 연산자와 같이 오른쪽으로 이동시키고, 비어있는 곳을 0으로 채운다. |
true 또는 false이다.| 연산자 | 설명 |
|---|---|
== | 피연산자의 값을 비교해서 둘이 같으면 true를 반환 |
!= | 피연산자의 값을 비교해서 둘이 다르면 true를 반환 |
> | 왼쪽 값이 오른쪽 값보다 크면 true를 반환 |
< | 왼쪽 값이 오른쪽 값보다 작으면면 true를 반환 |
>= | 왼쪽 값이 오른쪽 값보다 크거나 같으면 true를 반환 |
<= | 왼쪽 값이 오른쪽 값보다 작거나 같으면 true를 반환 |
| 연산자 | 설명 |
|---|---|
! | 피연산자 값이 false이면 true를 반환 |
&& | 피연산자 값이 둘다 true 이면 true를 반환, 왼쪽 값이 false이면 오른쪽은 계산하지 않고 넘어간다. ex01 |
& | 피연산자 값이 둘다 true 이면 true를 반환 |
││ | 피연산자 둘중 하나가 true 이면 true를 반환, 왼쪽 값이 true이면 오른쪽은 계산하지 않고 넘어간다. ex01 |
ㅣ | 피연산자 둘중 하나가 true 이면 true를 반환 |
^ | 피연산자 둘의 값이 다를때만 true를 반환 |
&= | 피연산자 둘을 비트곱 한 값이 true 이면 true를 반환 |
ㅣ= | 피연잔자 둘을 비트합 한 값이 true 이면 true를 반환 |
&& vs &, || vs |public class Ex01 {
public static void main(String[] args) {
int a=10;
int b=5;
if(a>3&&++b>5) {
System.out.println("short-circuit AND operator '&&' 사용시 : b="+b);
}
if(a>3&&++b>5) {
System.out.println("logical AND operator '&' 사용시 : b="+b);
}
}
}
결과
short-circuit AND operator '&&' 사용시 : b=6
logical AND operator '&' 사용시 : b=7
자바의 instanceof는 유형비교 연산자라고도 하며, 오브젝트가 특정 유형의 인스턴스(클래스, 서브클래스 또는 인터페이스)인지 테스트한다. 주로 고건문에 사용하며, instanceof의 왼쪽에 참조변수, 오른쪽에 타입(클래스명)이 피연산자로 위치한다.
true를 반환하고 이는 참조변수가 검사한 타입으로 형변환이 가능하다는 뜻이다.false를 반환대입연산자 =은 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다. 결합규칙은 오른쪽에서 왼쪽의 순서로 수행되고, 연산자들 중에 가장 낮은 우선순위를 가지고 있기 때문에 연산에서 제일 나중에 수행된다.
public class Ex01 {
public static void main(String[] args) {
int a, b;
a=2;
System.out.println("첫번째 a="+a);
a=b=3;
System.out.println("두번째 a="+a);
}
}
결과
첫번째 a=2
두번째 a=3
대입연산자의 왼쪽 피연산자를 lvalue(left value), 오른쪽 피연산자를 rvalue(right value)라고 한다. rvalue는 변수, 식, 상수 등 모두 가질 수 있지만 lvalue는 변수와 같이 값을 변경할 수 있어야 한다. 따라서 리터럴이나 상수같이 값을 저장할 수 없는 것은 lvalue가 될 수 없다.
public class Ex02 {
public static void main(String[] args) {
int a=0;
5=a;
}
}
결과
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The left-hand side of an assignment must be a variable
public class Ex03 {
final double pi=3.14; // 변수 앞에 final을 붙이면 상수가 된다.
pi=10.0;
}
결과
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The left-hand side of an assignment must be a variable
자바에서 사용하는 람다 표현식으로 왼쪽에 매개변수목록, 오른쪽에 함수를 갖는다.
(매개변수1, 매개변수2, ...) -> {함수}
3항 연산자 ?:는 세 개의 피연산자를 필요로 하고 종류는 조건 연산자 하나뿐이다. 조건식 ? 식1 : 식2의 모양을 가지고 있고, 조건식이 true이면 식1을, false이면 식2를 결과값으로 갖는다.
public class Ex01 {
public static void main(String[] args) {
int result;
int a=5, b=3;
result=a>b?a:b;
System.out.println(result);
}
}
결과
5
연산자가 둘 이상인 경우 연산자의 우선순위에 의해서 연산순서가 결정된다. 우선순위가 높은것부터 낮은것 순으로 정리하면 아래의 표와 같다.
| 종류 | 결합규칙 | 연산자 |
|---|---|---|
| 단항연산자 | <-- | ++ -- + - ~ ! |
| 산술연산자 | --> | * / % |
| --- | --> | + - |
| --- | --> | << >> |
| 비교연산자 | --> | < > <= >= instanceof |
| --- | --> | == != |
| 논리연산자 | --> | & |
| --- | --> | ^ |
| --- | --> | ㅣ |
| --- | --> | && |
| --- | --> | ││ |
| --- | --> | ?: |
| 대입연산자 | <-- | = += -= *= /= %= <<= >>= &= ^= != |