💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 주관적인 생각을 정리한 글입니다.
☁️ 내용정리
연산자(Operator)
자바에서 변수끼리의 연산을 위해 존재하는 것이 연산자이다.
Reference type = new Reference();
위의 코드에서 =
또한 연산자이며 대입 연산자라고 불린다.
연산자에는 여러 종류가 존재한다.
- 대입연산자:
=
- 산술연산자:
+
,-
,*
,/
,%
- 복합대입연산자(산술 + 대입):
+=
,-=
.*=
./=
,%=
- 단항연산자:
+
,-
(부호),++
,--
,!
(논리 부정) - 비교연산자:
==
,!=
,>
,>=
,<=
,<
- 삼항연산자: (조건문) ? (true 반환값) : (false 반환값)
- 비트연산자
비교연산자
비교연산자는 두개의 값이 같은지, 다른지를 확인할 때 사용된다.
피연산자중 하나의 피연산자가 원시타입인 경우에는 피연산자가 가지고 있는 값을 비교한다.
int a = 1;
Integer b = Integer.valueOf(1);
System.out.println(a == b);
// true
Integer
타입은 -127 ~ 128
까지의 범위는 캐싱해서 사용한다. 그 외 범위에 속하는 숫자는 새로운 Integer
객체를 생성한다.a
와 b
를 비교할 때는 b
를 unBoxing
하여 값을 비교한다.
타입 캐스팅
자바에서는 다형성을 지원한다. 객체끼리도 타입 캐스팅이 가능하고, 원시값들도 캐스팅이 가능하다.
큰 공간을 가지는 값 → 작은 공간을 가지는 값 으로의 캐스팅은 캐스팅을 명시할 필요가 없다.
하지만 반대는 필요하다. 값이 유실될 수 있다는 것을 개발자가 확인했다~ 라는 의미이다.
int i = (int) 1.1;
char c = (char) 98;
boolean b = (boolean) 1 // 이런건 불가능하다 불리언은 논리값이라 숫자와의 캐스팅, 비교가 불가능
Child child = new Child();
Parent parent = child;
Child child2 = (Child) parent;
Child test = (Child) new Parent(); // 이건 안된다.
☁️ 내 생각
연산을 수행하면 스레드의 메모리에 어떤 일이 일어날까
int a = 1 + 2;
위의 코드를 실행하면 얼만큼의 연산이 일어날까?
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=2, args_size=1
0: iconst_3 // 오퍼랜드 스택에 3을 저장
1: istore_1 // 1번째 변수에 스택의 값을 저장
2: return // 리턴
LineNumberTable:
line 3: 0
line 4: 2
하나밖에 없는 a 변수에 3을 저장하는 대입연산을 수행하고 종료된다.
int a = 1;
int b = 2;
int c = a + b;
그렇다면 위의 코드를 실행하면 얼만큼의 연산이 일어날까?
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=4, args_size=1
0: iconst_1 // 스택에 1을 저장
1: istore_1 // 스택을 pop 하여 첫 번째 변수에 저장
2: iconst_2 // 스택에 2를 저장
3: istore_2 // 스택을 pop 하여 두 번째 변수에 저장
4: iload_1 // 첫 번째 변수 값을 스택에 저장
5: iload_2 // 두 번째 변수 값을 스택에 저장
6: iadd // 스택의 값을 더하기 연산
7: istore_3 // 스택의 값을 세 번째 변수에 저장
8: return
LineNumberTable:
line 3: 0
line 4: 2
line 5: 4
line 6: 8
}
확실히 길어졌다.
'JAVA > 자바의 신' 카테고리의 다른 글
7장. 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2024.01.04 |
---|---|
6장. 내가 조건을 좀 따져요 (0) | 2024.01.04 |
4장. 정보를 어디에 넣고 싶은데 (1) | 2024.01.04 |
3장. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (0) | 2024.01.03 |
2장. Hello God Of Java (1) | 2024.01.03 |