자바가 제공하는 다양한 연산자를 학습하세요.
산술 연산자는 사칙연산을 다루는 연산자로 두개의 피연산자를 가지는 이항 연산자를 말합니다.
연산 | 연산자 | 수식 | 결과 |
---|---|---|---|
덧셈 | + | A + B | A와 B를 더한 값 |
뺄셈 | - | A - B | A와 B를 뺀 값 |
곱셈 | * | A * B | A와 B를 곱한 값 |
나눗셈 | / | A / B | A와 B를 나눈 몫 |
나머지 | % | A % B | A와 B를 나눈 나머지 |
피연산자중 더 큰 자료형으로 자동형 변환이 되어 연산결과가 리턴된다.
또는 원하는 자료형으로 형변환해주면 된다.
int int1 = 5;
int int2 = 2;
double double1 = 2.0;
double double2;
double2 = int1 + double1;
double2 = (double) (int1 / int2);
비트 연산자는 데이터를 비트 단위로 연산한다. 그래서 0또는 1로 표현이 가능한
정수 타입이나 정수형 캐스팅이 가능한 자료형만 비트 연산이 가능하다.
연산식 | 설명 |
---|---|
x << y | 정수 x의 각 비트를 y만큼 왼쪽으로 이동시키고 0으로 채워넣는다 |
x >> y | 정수 x의 각 비트를 y만큼 오른쪽으로 이동시키고 정수 a의 최상위 부호비트로 채워넣는다 |
x >>> y | 정수 x의 각 비트를 y만큼 왼쪽으로 이동시키고 0으로 채워넣는다 |
2 << 3
2는 2진수로 표현하면 10이다. 그리고 << 3은 3자리를 왼쪽으로 밀어넣으면 10000이 되는데 이를 10진수로 표현하면 16이 된다.
16 >> 3
위의 예제와 반대의 경우로 2진수 10000를 3자리를 오른쪽으로 밀어넣으면 10이 되고 10진수로 2다.
-16 >> 3
비트 연산자는 총 32비트로 이루어지는데 위의 예제는 양수여서 차이가 없지만 -의 경우 최상의 부호비트의 값이 1이 된다. 그래서 >>의 경우 오른쪽의 있는 값만큼이동하고 빈자리를 최상위 부호비트로 채우기 때문에 아래 이미지처럼 된다.
-16 >>> 3
연산>>>의 원리는 >>와 같지만 최상위비트가 0으로 채워진다. 그렇기에 결과 값은 양수로 변한다.
System.out.println("2 << 3 = " + (2<<3));
System.out.println("16 >> 3 = " + (16>>3));
System.out.println("-16 >> 3 = " + (-16>>3));
System.out.println("-16 >>> 3 = " + (-16>>>3));
연산식 | 논리 | 설명 |
---|---|---|
& | AND | 두 비트가 1일 경우 결과가 1 |
| | OR | 두 비트 중 하나라도 1일 경우 결과가 1 |
^ | XOR | 두 비트가 값이 다를 경우 결과가 1 |
~ | NOT | 비트 반전 |
비교 연산자라고도 하며 부등호를 이용하는 연산자이다. 리턴 값으로는 false 또는 true를 반환한다.
연산자 | 수식 | 설명 |
---|---|---|
> | 1 > 2 | 왼쪽 항이 크면 참을 아니면 거짓을 반환한다. |
< | 1 < 2 | 오른쪽 항이 크면 참을 아니면 거짓을 반환한다. |
>= | 1 >= 2 | 왼쪽 항이 크거나 같으면 참을 아니면 거짓을 반환한다. |
<= | 1 <= 2 | 오른쪽 항이 크거나 같으면 참을 아니면 거짓을 반환한다. |
== | 1 == 2 | 두 값이 같으면 참을 아니면 거짓을 반환한다. |
!= | 1 != 2 | 두 값이 같지 않으면 참을 아니면 거짓을 반환한다. |
논리 연산자는 AND, OR, NOT 세 가지가 있으며 결과로 true, false를 반환한다.
연산자 | 수식 | 설명 |
---|---|---|
&& | 1 < 2 && 1 == 1 | 두 항이 모두 참일 경우에만 참을 반환한다. |
|| | 1 > 2 || 1 == 1 | 두 항중 하나라도 참일 경우에 참을 반환한다. |
! | !(1 < 2) | 단항 연산자로 대상의 논리를 부정한다. |
instanceof는 객체의 타입을 확인하는 연산자이다.
타입이 같다면 true를 반환하며 상속관계에서 자동형변환이 가능하다면 true를 반환한다.
instanceof는 인스턴스 instanceof 클래스
와 같은 형태로 사용한다.
class Parent{}
class Child extends Parent{}
public class InstanceofTest {
public static void main(String[] args){
Parent parent = new Parent();
Child child = new Child();
System.out.println( parent instanceof Parent ); // true
System.out.println( child instanceof Child ); // true
System.out.println( parent instanceof Child ); // false
System.out.println( child instanceof Parent ); // true
}
}
3번째의 경우 부모클래스는 자식클래스로 강제 형변환을 해야하는 경우라 false를 반환하지만 4번의 경우에는 자동형반환이 가능하기에 true를 반환한다.
대입연산자를 말하며 변수에 값을 대입할 때 사용하는 이항 연산자를 말한다.
피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
연산자 () | 설명 |
---|---|
= | 왼쪽의 피연산자에 오른쪽 피연산자를 대입 |
+= | 왼쪽 피연산자의 오른쪽 피연산자를 더한 후 오른쪽 피연산자의 대입 |
-= | 왼쪽 피연산자의 오른쪽 피연산자를 뺀 후 오른쪽 피연산자의 대입 |
*= | 왼쪽 피연산자의 오른쪽 피연산자를 곱한 후 오른쪽 피연산자의 대입 |
/= | 왼쪽 피연산자의 오른쪽 피연산자를 나눈 몫을 오른쪽 피연산자의 대입 |
%= | 왼쪽 피연산자의 오른쪽 피연산자를 나눈 나머지 값을 오른쪽 피연산자의 대입 |
&= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후 그 결과값을 왼쪽의 피연산자에 대입 |
|= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후 그 결과값을 왼쪽의 피연산자에 대입 |
^= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후 그 결과값을 왼쪽의 피연산자에 대입 |
<<= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후 그 결괏값을 왼쪽의 피연산자에 대입 |
>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한 후 그 결과값을 왼쪽의 피연산자에 대입 |
>>>= | 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후 그 결과값을 왼쪽의 피연산자에 대입 |
화살표 연산자는 Java8에서 추가된 람다식을 다루는 연산자이다.
람다식은 메서드를 하나의 '식'으로 표현한 것이다. 그래서 메서드명과 반환값을 제거하고 매개변수 선언부와 몸통{}으로만 표현한다.
(매개변수) -> {실행문;}처럼 사용한다.
이와 관련해서는 추후 람다식 학습시에 자세히 알아보자
if문과 같이 조건문처럼 사용하는데 간단한 조건문의 경우 3항 연산자를 사용하여 해결할 수 있다
조건식 ? 참일때 : 거짓일때;
처럼 사용할 수 있다.
String s = 2 > 1 ? "참": "거짓"; // s = "참"