728x90
연산자
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instance of
- assignment operator (=)
- 화살표 연산자 (->)
- 3항 연산자
- 연산자 우선 순위
- Java13의 switch 연산자
연산자
- 연산에 사용되는 기호
- 연산이란 주어진 정보를 통해 일정한 규칙에 따라 어떤 값이나 결과를 구하는 과정
- 연산자는 연산을 수행하는 기호
- 피연산자: 연산자의 작업 대상
- 대부분의 연산자는 두개의 피연산자를 필요로 한다.
산술 연산자
- 대부분의 연산자는 두개의 피연산자를 필요로 한다.
- % / *
- 수학적인 계산에 사용되는 연산자
- boolean을 제외한 다른 primitive 타입에 사용 가능
- 나누기 연산자의 경우 두 피연산자가 정수인 경우에는 정수형 나눗셈, 실수인 경우에는 실수형 나눗셈이 진행된다.
- 실수와 정수간 산술 연산을 진행하면 실수 연산자가 진행된다.
public class Test { public static void main(String[] args) { double a = 1.2; int b = 2; System.out.println(a/b);//0.6 } }
- +연산자의 경우 두 피연산자 중 하나가 String 타입이라면 두 피연산자를 String으로 인식해 둘을 이어준다.
public class Test { public static void main(String[] args) { double a = 1.2; String b = "hello"; System.out.println(a+b); //1.2hello } }
비트 연산자
<< >>> ~ & | ^
- 비트 연산자는 피연산자를 비트단위로 연산한다.
- 실수는 허용하지 않고 정수만 허용한다.
- 주로 개별의 비트를 integer값으로 만들기 위해 사용한다.
- 비트 연산자는 실수, boolean, 배열 그리고 객체(Object)에는 사용할 수 없다.
- 두 피연산자 중 하나가 long이라면 연산되는 부분은 long타입으로, 그렇지 않다면 int로 연산된다.
- '<<'
- 좌측에 있는 피연산자의 비트를 우측에 있는 피연산자의 숫자만큼 비트를 옮기는 연산자
- 자릿수를 넘어가면 해당 비트는 사라지게 되고 비트를 옮겨 새로 생긴 자리의 비트는 0으로 대체한다.
- '>>'
- 좌측에 있는 피연산자의 비트를 우측에 있는 피연산자의 숫자만큼 비트를 옮기는 연산자이다.
- 자릿수를 넘어가면 해당 비트는 사라지게 되고 비트를 옮겨 새로 생긴 자리의 비트는 이전의 최상위 비트로 대체한다.
- '>>>'
- 위에서 사용한 '>>' 비트 연산과 같은데 새로생긴 자리의 비트가 무조건 0으로 따라가는것이 다르다.
- &(and)
- 피연산자간의 비트를 비교했을 때 두개 모두 1이면 1로 치환되고 아니면 0으로 치환된다.
- |(or)
- 피연산자간의 비트를 비교했을 때 둘중 하나가 1이면 1로 치환된다.
- ^(xor)
- 피연산자간의 비트를 비교했을 때 두개의 비트가 다르면 1 같으면 0을 반환한다.
- ~
- 단항 연산자로 각 자리에 해당하는 비트를 모두 반전시킨다. 정확하게 말하자면 -1과 xor 연산을 한다.
관계 연산자
- == != < <= > >=
- 두 피연산자를 비교하는데 사용한다.
- 피연산자들의 값들이 같은지 비교하거나 크고 작음을 비교하는 연산
- 만약 두가지 타입을 비교하게 된다면 true 혹은 false를 반환한다.
- 참조형의 경우에는 객체의 주소값을 비교한다.
논리 연산자
- && || !
- 조건부 &&, || 연산자
- && 두번째 피연산자의 결과값에 따라 평가
- || 첫번째 피연산자의 결과값에 따라 평과
instanceof
- 특정 객체가 특정 타입인지 확인하는 연산자
- 참조 변수가 지정된 유형의 객체 참조를 포함하고 있는지의 여부를 확인
- 주로 다형성, 업-다운 캐스팅과 함께 설명되는 내용
- 왼쪽에는 참조변수, 오른쪽에는 타입(클래스명)이 피연산자로 위치
- true 혹은 false 반환
- true를 반환한다면 참조변수가 검사한 타입으로 형변환이 가능하다는 뜻
- 값이 null인 참조변수에 대해선 항상 false를 반환
class Parent { ... } class Child extends Parent { ... }
Parent parent = new Child();
System.out.println(parent instanceof Child); //true
System.out.println(parent instanceof Parent); //true
System.out.println(parent instanceof Object); //true
#### 대입 연산자
- 연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입
- 객체 참조를 할당하기 위해 사용
#### 화살표 연산자
- 메서드를 하나의 식으로 표현한 것
```java
int min(int x, int y){
return x < y ? x : y ;
}
3항 연산자
- 3개의 피연산자를 가지고 연산을 한다.
- C언어로부터 차용
- 조건?true일때 반환값:false일때 반환값
Java 13 switch
//기존 switch
switch(test)
{
case 1:
result = 3;
break;
case 2:
result = 3;
break;
case 3:
result = 33;
break;
}
//Java 12. 같은 행위를 하는 다른 케이스들을 묶을 수 있다.
//예를 들어 case 1과 case 2가 같은 행위를 한다면
int test = 0;
switch(test)
{
case 1, 2:
result = 3;
break;
case 3:
result = 33;
break;
}
// -> 를 통해 break도 생략 가능
switch(test)
{
case 1, 2 -> 3;
case 3 -> 33;
}
//Java 13
// yield가 추가되었다.
// break로 값을 반환하는 문법이 yield로 변경되었다.
private static int getValueViaYield(String mode) {
int result = switch (mode) {
case "a", "b":
yield 1;
case "c":
yield 2;
case "d", "e", "f":
// do something here...
System.out.println("Supports multi line block!");
yield 3;
default:
yield -1;
};
return result;
}}
728x90
'Java 웹 프로그래밍' 카테고리의 다른 글
백기선 자바스터디 10주차 (1) | 2021.02.27 |
---|---|
AllArgsConstructor, RequiredArgsConstructor에 staticName 옵션을 이용한 static factory 메소드 생성 (0) | 2021.02.14 |
[백기선 온라인 스터디] 2주차 과제 (0) | 2021.01.27 |
[백기선 온라인 스터디] 1주차 과제 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.15 |
[ERROR] Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 (2) | 2020.08.26 |