본문 바로가기

java

자바의 정석 ch3

1. 연산자

연산자 : 연산을 수행하는 기호

피연산자 : 연산자의 연산 수행 대상

"모든 연산자는 연산결과를 반환한다."

4 * x + 3

→ 4 * 5 + 3

→ 23

y = 4 * x + 3;                 // x의 값이 5라면, y의 값은 23이 된다.

System.out.println(y);   // y의 값인 23이 화면에 출력된다.

 

System.out.println(4 * x + 3);              // x의 값이 5라고 가정하면

→ System.out.println(23);  

 

2. 연산자의 종류

 

3. 연산자의 우선순위

"하나의 식(expression)에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행할지를 자동 결정하는 것"

 

4. 연산자의 결합규칙

"우선순위가 같은 연산자가 있을 때, 어떤 것을 먼저?"

"대입과 단항 연산자를 제외하면, 모두 왼쪽 → 오른쪽"

연산자의 우선순위와 결합법칙은 "세 가지만 기억하자"

 

1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.

2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.

3. 단항 연산자와 대입연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

 

5. 증감 연산자

증감 연산자(++) 피연산자의 값을 1 증가시킨다.

"증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형의 차이가 없다."

감소 연산자(--) 피연산자의 값을 1 감소시킨다.

 

6. 부호 연산자

'-'는 피연산자의 부호를 반대로 변경

'+'는 아무런 일도 하지 않는다. (실제 사용X)

 

7. 형변환 연산자

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

(타입)피연산자

double d = 85.4;

int score = (int)d;

→ int score = (int)85.4;

→ int score = 85;

유니코드 문자표

8. 자동 형변환

float f  = 1234;                        // int타입의 값을 float타입의 변수에 저장

float f = (float)1234;

 

int i = 3.14f;                            // 에러

int i = (int)3.14f;                     // OK.

 

형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.

"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."

그래서 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.

byte b = 100;               // OK, byte 타입의 범위(-128 ~ 127)의 값의 대입

 

byte b = (byte)100;      //  OK, byte타입으로 형변환하여 대입

 

int i = 100;

byte b = i;                    // 에러, int타입을 byte의 타입에 대입

byte b = (byte)i;           // OK, byte 타입으로 형변환하여 대입

 

byte b = 1000;             // 에러, byte 타입의 범위(-128 ~ 127)를 벗어난 값의 대입

byte b = (byte)1000;    // OK, 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.

 

9. 사칙 연산자 + - * /

10. 산술 변환

"연산 전에 피연산자의 타입을 일치시키는 것"

① 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

long + int      →          long + long          → long

float + int      →          float + float          → float

double + float    →    double + double   → double

 

② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

byte + short    →        int + int         → int   

char + short    →        int + int         → int

 

"연산 전에 피연산자의 타입을 일치시키는 것"

① 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

 

 

11. 반올림 - Math.round()

실수를 소수점 첫 째자리에서 반올림한 정수를 반환

long result = Math.round(4.52);       // result에 5가 저장된다.

 

double pi = 3.141592;             // 3.141로 바꾸려면?

 

12. 나머지 연산자 %

오른쪽 피연산자로 나누고 남은 나머지를 반환

나누는 피연산자는 0이 아닌 정수만 허용(부호는 무시됨)

System.out.println(10 % 8);                // 10을 8로 나눈 나머지 2가 출력된다.

System.out.println(10 % 8);                // 위와 같은 결과를 얻는다.

 

13. 비교 연산자 > < >= <= == !=

두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환

 

 

14. 문자열의 비교

문자열 비교에는 == 대신 equals()를 사용해야 한다.

String str1 = "abc";

String str2 = "abc";

System.out.println(str1 == str2);                 // true

System.out.println(str1.equals(str2));         // true

 

String str1 = new String("abc");

String str2 = new String("abc");

System.out.println(str1 == str2);                 // false

System.out.println(str1.equals(str2));         // true

 

15. 논리 연산자 && ||

조건식을 연결할 때 사용하는 연산자

|| (OR결합) 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다.

&& (AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.

16. 논리 부정 연산자 !

true를 false로, false는 true로 바꾼다.

 

boolean b = true;

!! b     →    !!true    →      ! false      → true

 

17. 조건 연산자  ? :

조건식의 결과에 따라 연산결과를 달리한다.

result = (x > y) ? x : y ;          // 괄호 생략 가능

result = (x > y) ? x : y ;

→ result = (5 > 3) ? 5 :  3 ;

→ result = (true) ? 5 : 3 ;

→ result = 5;

 

18. 대입 연산자

오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 반환

System.out.println(x = 3);         변수 x에 3이 저장되고

→ System.out.println(3);          연산결과인 3이 출력된다.

lvalue - 대입 연산자의 왼쪽 피연산자

rvalue - 대입 연산자의 오른쪽 피연산자

int i = 0;

3 = i + 3;                   // 에러, lvalue가 값을 저장할 수 있는 공간이 아니다.

i + 3 = i;                    // 에러, lvalue의 연산결과가 리터럴(i+3 → 0+3 → 3)

 

final int MAX = 3;        // 변수 앞에 키워드 final을 붙이면 상수가 된다.

MAX = 10;                  // 에러, 상수(MAX)에 새로운 값을 저장할 수 없다.

 

19. 복합 대입 연산자

대입 연산자와 다른 연산자를 하나로 축약

'java' 카테고리의 다른 글

자바강의 3일차  (1) 2023.12.27
자바강의 2일차  (1) 2023.12.27
자바강의 1일차  (0) 2023.12.24
자바의 정석 ch4  (1) 2023.12.24
자바의 정석 ch2  (0) 2023.12.21