연산자는 어떤 것들이 있으며 어떻게 사용할까?
연산자와 비연산자
--
- 연산자 : 연산을 수행하는 기호
- 비연산자 : 연산 작업 대상
x + 3 - 7
연산자 : +, -
비연산자 : x, 3, 7
--
연산자 종류
--
~, |, &, ^는 비트 연산자이기도 하다.
참고사항
- 0으로 나누면 "에러"발생
- 문자형(char)은 유니코드로 저장되어 정수이기에 정수와도 연산 가능 [ a + 1 -> b / d - a -> 3 ]
- %연산자는 피연산자로 정수만 허용
--
단항 연산자
--
피연산자가 하나뿐인 연산자다.
+Z // 양수 표시 (생략 가능)
-Z // 음수 표시
++Z // 우선적으로 Z에 +1을 수행하고 작업 진행 (전위 증가)
Z++ // 현재 작업을 진행하고나서 +1을 수행 (후위 증가)
--Z // 우선적으로 Z에 -1을 수행하고 작업 진행 (전위 감소)
Z-- // 현재 작업을 진행하고나서 -1을 수행 (후위 감소)
!Z // Z의 값을 반대(부정)의 값을 반환 (boolean타입의 피연산자에만 사용 가능) (true -> false, flase -> true)
~Z // Z의 비트(0,1)값을 반전시킴 (정수타입의 피연산자에만 사용 가능) (5 -> -6 [0101 -> 1111])
(type)Z // Z의 타입을 명시한 타입으로 형변환
--
산술 연산자
--
수학적 연산을 수행하는 연산자다.
a + b // 덧셈
a - b // 뺄셈
a * b // 곱셈
a / b // 나눗셈
a % b // 나눈 후 나머지
a << b // 정수 a의 값을 비트(2진수) 단위로 b번 좌측으로 이동 (001011 -> 010110)
a >> b // 정수 a의 값을 비트(2진수) 단위로 b번 우측으로 이동 (001011 -> 000101)
--
비교 연산자
--
두 피연산자를 비교하여 ture 또는 false의 값으로 반환하는 연산자다.
a < b // a가 b보다 작은지
a <= b // a가 b보다 작거나 같은지
a > b // a가 b보다 큰지
a >= b // a가 b보다 크거나 같은지
a == b // a와 b가 같은지
a != b // a와 b가 다른지
등가비교 연산자(==, !=)에서는
피연산자가 "기본형"이면 해당 값이 같은지 비교하고
피연산자가 "참조형"이면 객체의 주소 값이 같은지 비교 (같은 주소를 가리키고 있는지)
예시
int a = 10; int b = 10; boolean result = a == b; // ture String a = "Hello"; String b = "Hello"; boolean result = a == b; // false String a = "Hello"; String b = a; boolean result = a == b; // true
만약 "참조형(문자열)"을 비교할 때 주소가 아닌 값을 비교하고 싶다면 equals() 메서드를 사용하면 된다.피연산자.equals(피연산자)
String a = "Hello"; String b = "Hello"; boolean = a.equals(b); // true
참고
0.1 == 0.1f는 false다.
실수(0.1f)는 완벽한 0.1000000000이 아닌 0.1000000012처럼 근삿값으로 저장되기 때문이다.
번외 (instanceof)
instanceof 연산자는
특정 객체가 어떤 클래스나 인터페이스의 인스턴스인지 확인하는 비교 연산자다.
(객체의 타입을 안전하게 확인하고, 올바른 형변환을 하기 위해 확인하는 용으로 자주 사용된다.)
객체 instanceof 타입(클래스 또는 인터페이스)
String str = "Hello";
boolean result = str instanceof String; //true
상속 계층을 통해
해당 객체 타입의 부모 클래스나 인터페이스와도 비교할 수 있다.
class AAA {...}
class BBB extends AAA {...}
AAA a = new AAA();
BBB b = new BBB();
boolean result = a instanceof AAA; // true
boolean result = b instanceof AAA; // true (BBB는 AAA를 상속받은 자식 클래스)
boolean result = a instanceof BBB; // false
boolean result = b instanceof BBB; // true
간단하게 생각하면
대상 객체가 해당 클래스(or 인터페이스) 타입으로 형변환이 가능한지에 대한 여부를 확인할 수 있다.
(자식 클래스는 부모 클래스로 형변환이 가능하기 때문에)
--
논리 연산자
--
두 개 이상의 조건을 결합하여 결과는 논리적으로 판단하는 연산자다.
(주로 비교 연산자를 통해 나온 결과들을 결합하여 원하는 조건을 만들어 내는 데에 사용된다.)
// a, b는 true 또는 false의 값을 가져야 한다.
a || b // (OR 연산자) a 또는 b 중 하나라도 true가 존재하면 true 반환
a && b // (AND 연산자) a와 b 모두 true면 true 반환
비트 연산자
a & b // (비트 AND 연산) 두 정수를 비트(2진수)로 표현하여 대응하는 비트가 모두 1이면 1반환
a | b // (비트 OR 연산) 두 정수를 비트(2진수)로 표현하여 대응하는 비트가 하나라도 1이면 1반환
a ^ b // (비트 XOR 연산) 두 정수를 비트(2진수)로 표현하여 대응하는 비트가 서로 다르면 1반환
XOR 연산 예시)
int a = 5; (00000101)
int b = 3; (00000011)
00000101
00000011
--------------
00000110 = 6
--
삼항 연산자
--
조건에 따라 참(true)과 거짓(false)에 대한 반환할 결과를 지정하는 연산자다.
조건식 ? 참일 때 반환할 값 : 거짓일 때 반환할 값
int a = 10;
int b = 20;
int result = (a > b) ? a : b; // 20
--
대입 연산자
--
변수에 값을 할당하거나 기존의 값을 수정하는 연산을 줄인 연산자다.
a = b // a에 b의 값을 할당
a += b // a = a + b와 같은 의미
a -= b // a = a - b와 같은 의미
a <<= b // a = a << b와 같은 의미
a ^= b // a = a ^ b와 같은 의미
--
'Language > Java' 카테고리의 다른 글
배열 (+ 다차원 배열) (0) | 2024.10.10 |
---|---|
조건문, 반복문 (+ break, continue, label) (0) | 2024.10.06 |
[변수] 변수와 상수 (+ 타입, 진법, 형변환) (0) | 2024.09.22 |
자바 기본 규칙 (0) | 2024.09.21 |
Java 빌드 (+ Maven, Gradle) (0) | 2024.09.18 |