연산자의 종류
단항연산자
++ -- + - ! (type)
산술연산자
* / % + -
비교연산자
< > <= >= == !=
논리연산자
& | && ||
대입연산자
= += -= *= /= %=
연산자의 우선순위
- 상식적으로..!
- 산술 > 비교 > 논리 > 대입 순
연산자의 결합규칙
3 + 4 - 5 (왼쪽 → 오른쪽 순으로)
x = y = 3 (오른쪽 → 왼쪽 순으로)
증감 연산자
++ --
증감 연산자가 독립적으로 사용된 경우, 전위형(++i)과 후위형(i++)은 동일하다.
j = ++i
↓
++i; // 증가 후
j = i; // 참조하여 대입
----------------------
j = i++;
↓
j = i; // 참조하여 대입 후
i++; // 증가
형변환
double d = 85.4;
int score = (int)d; // 85;
(char)65 = 'A'
(int)'A' = 65
자동 형변환
float f = 1234;
float f = (float)1234; // 자동 형변환, 작은 값(int)을 큰 값(float)에 넣는 행위이므로 값손실이 일어나지 않아
//컴파일 시 (float)를 자동으로 추가해줌.
int i = 3.14f; // error
int i = (int)3.14f; // 3.14 에서 3으로 값이 변경되어 값손실이 일어나므로 type을 추가해주어야 함.
큰 값을 작은 값에 입력할 때 형변환(type)을 추가해주어야 함!(∵ 값손실)
크기 | 1byte | 2byte | 4byte | 8byte | 4byte | 8byte |
종류 | byte | short | int, (char) | long(10^19) | float(10^38) | double |
byte b = 100;
byte b = (byte)100; // 자동 추가
---------------------------------------------------------------------------
int i = 100;
byte b = i; // 'error': i가 변수이므로 확신할 수 없음. 별도 수동형변환이 필요함.
byte b = (byte)i; // b = 100;
---------------------------------------------------------------------------
byte b = 1000; // error
byte b = (byte)1000; // 연산 가능. 하지만 b = -24가 저장됨. byte 저장가능한 숫자범위(-128~127) 초과
산술 변환
자료 크기가 큰 type으로 바뀐 후 연산을 실시함.
int a = 1_000_000;
int b = 2_000_000;
long c = a * b; // c = -1454759936, overflow 발생
//(int가 10^9까지 저장할 수 있으므로 그 이상의 값은 손실이 일어남)
c = (long)a * b; // 2_000_000_000_000;
비교연산
euals() method를 사용해야 하는 때도 있다.
String str1 = "abc";
String str2 = new String("abc");
System.out.printf(" str2==\"abc\" ? %b%n", str2=="abc"); // false
System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc")); // true
'developer > 자바의정석(기초편)' 카테고리의 다른 글
[자바의 정석(기초편)] 2차원 배열, String 클래스 (0) | 2023.04.11 |
---|---|
[자바의정석(기초편)] 3/29 개발공부일지 - 변수(1) (0) | 2023.03.29 |