본문 바로가기

developer/자바의정석(기초편)

[자바의 정석(기초편)] 연산자

연산자의 종류

단항연산자

++ -- + - ! (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