산술 연산자
- 숫자를 표현하는 자료형만 피연산자로 사용 (문자열 더하기 제외)
- boolean에서는 사용할 수 없다
- 문자열(char)가능
1
2
3
4
5
6
|
public static void main( String[] args) {
int a = 10 + 20;
char c = 'b' + 10;
boolean isTrue = true + false; // Error
}
|
cs |
//부호 연산자
int num1 = 10;
int num2 = +num1;
int num3 = -num1;
System.out.println(num1); // 10
System.out.println(num2); // 10
System.out.println(num3); // -10
//증감 연산자
int num1 = 10;
int num2 = ++num1;
int num3 = num1++;
int num4 = --num1;
int num5 = num1--;
비트연산자
- << 연산자 : 비트를 왼쪽으로 이동
- >> 연산자: 비트를 오른쪽으로 이동
- 오른쪽 피연사를 통해 몇 칸 움직이는지 정한다
- >>> : 부호없는 비트이동 연산자, 오른쪽 이동후 남은공간을 '0'으로 채움
1
2
3
4
5
6
7
|
public static void main( String[] args) {
int num1 = 14; // 00001110
int num2 = 14 << 1; // 00011100
int num3 = 14 >> 1; // 00000111
}
|
cs |
관계 연산자
관계 비교를 통해 boolean값을 리턴한다.
- > : 왼쪽의 값이 크면 true, 작으면 false 반환
- < : 오른쪽의 값이 크면 true, 작으면 false 반환
- >=: 왼쪽의 값이 크거나 같으면 true, 작으면 false 반환
- <= : 오른쪽의 값이 왼쪽과 크거나 같으면 true, 작으면 false 반환
- == : 두항의 값이 같으면 true, 아니면 false를 반환
- != : 두항이 같지 않으면 true 아니면 false를 반환
논리 연산자
논리연산자는 논리곱(&&,&) 논리합(||,|), 배타적 논리합 (^) 논리부정(!) 연산을 수행한다.
피연산자는 boolean 타입만 사용할 수 있다. 결과는 boolean값
&&, & | 피연산자가 모두 true일 경우, true |
||, | | 피연산자 중 하나만 true일 경우, true |
^ | 피연산자가 서로 다른 값일 경우, true |
! | true는 false로 false는 true로 바꾼다. |
1
2
3
4
5
6
7
8
9
|
public static void main( String[] args) {
boolean a1 = true;
boolean b1 = false;
System.out.println(a1 && b1); // false
System.out.println(a1 || b1); // true
System.out.println(a1 ^ b1); // true
System.out.println(!a1); // false
}
|
cs |
instance of
변수명 instanceof 클래스명
개체가 특정 클래스 인스턴스인지 판단하는 연산자
맞으면 true, 틀리면 false 반환
1
2
3
4
5
6
|
public static void main( String[] args) {
Bird duck = new Duck();
Dog dog = new Dog();
System.out.println(duck instanceof Bird); // true
System.out.println(dog instanceof Bird); // false
}
|
cs |
손주의 관계에서도 instance of 를 사용할 수 있다 ( puppy -> dog -> animal 관계를 상속 관계가 존재한다 가정하자)
1
2
3
4
5
6
7
|
public static void main( String[] args) {
Animal dog = new Dog();
Animal puppy = new Puppy();
System.out.println(dog instanceof Animal); // true
System.out.println(puppy instanceof Animal); // true
}
|
cs |
RTTI (Run Time Type Identification)
런타임중에 어떤 타입의 오브젝트인지 확인하는 방법을 제공한다
- getClass() : 런타임 클래스의 정보를 가져온다
- getClass().getName() : 패키지 경로를 포함한 클래스명을 가져온다.
1
2
3
4
5
6
|
public static void main( String[] args) {
Animal dog = new Dog();
System.out.println(dog.getClass()); // class com.java.study.Dog
System.out.println(dog.getClass().getName()); // com.java.study.Dog
}
|
cs |
assignment(=) operator
변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽
- = : 왼쪽 피연산자에 오른쪽 피연산자를 대입한다.
- 값형의 경우 값을 복사한다.
int age = 10;
int age2 = age;
age = 20;
- 참조형일 경우 대입시 얕은 복사가 일어난다.
BungOh ppang = new BungOh();
BungOh ppang2 = ppang;
화살표(->) 연산자
Java8 에서 도입 ( docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)
( parameters ) -> { expression body }
람다 파라미터 리스트와 바디를 구분
3항 연산자 (tenary operator)
조건식 ? 피연산자1 : 피연산자2
조건식의 참이라면 결과는 피연산자1이 선택되고, 거짓이라면 피연산자2 선택된다.
3항 연산자를 쓰는 것이 좋은 방법인지는 다양한 의견이 있다. 하지만 복잡한 조건식에서는 쓰지않는 것을 권장하는 분위기이다.
www.reddit.com/r/AskProgramming/comments/9x33c9/ternaryconditional_operator_is_it_a_good_practice/
연산자 우선 순위
우선순위 | 연산자 | 연산자 결합 방식 |
1 | exp++ exp-- | -> |
2 | ++exp --exp +exp -exp ~ ! | -> |
3 | * / % | -> |
4 | + - | -> |
5 | << >> >>> | -> |
6 | < > <= >= instanceof | -> |
7 | == != | -> |
docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
Java13, switch 연산자
Java12에서 switch expressions 기능이 추가되었다.
switch 문에서 ' : ' 대신 '->'을 사용할 수 있다.
arrow를 사용하면 기존에 쓰던 break를 생략해서 사용할 수 있다
1
2
3
4
5
6
7
8
|
static void print (int k) {
switch (k) {
case 1 -> System.out.println("SUNDAY");
case 2 -> System.out.println("MONDAY");
case 3 -> System.out.println("TUESDAY");
default -> System.out.println("DAY");
}
}
|
cs |
Java 13에서는 switch 에 yield 가 생겼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
switch (LANGUAGE) {
case PYTHON -> {
System.out.println("PYTHON");
yield 1;
}
case JAVASCRIPT -> {
System.out.println("JAVASCRIPT");
yield 2;
}
default -> {
System.out.println("JAVA");
yield 0;
}
}
|
cs |
docs.oracle.com/en/java/javase/13/language/switch-expressions.html
'JAVA' 카테고리의 다른 글
JUnit5 (0) | 2020.12.05 |
---|---|
제어문 (0) | 2020.12.05 |
자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.17 |
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.17 |
Interface default methods (0) | 2020.10.19 |