자바의정석 3장

서현우·2022년 3월 11일
0

자바의정석

목록 보기
3/22

3장 연산자(Opertor)

  • 연산자 : 연산을 수행하는 기호
  • 피연산자 : 연산자의 연산 수행 대상
  • "모든 연산자는 연산결과를 반환한다."

연산자의 종류

증감 연산자

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

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

  • 전위형 : 값이 참조되기 전에 증가, j=++i;

  • 후위형 : 값이 참조된 후에 증가, j=i++;

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

j=++i; //전위형 
++i; //증가 후에
j = i; //참조하여 대입

j=i++; //후위형
j=i; //참조하여 대입 후에
i++; //증가

형변환 연사자

  • 형변환이란,
    변수 또는 상수의 타입을 다른 타입으로 변환하는 것
  • (타입)피연산자

자동 형변환

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

int i = 3.14f; //에러. 값손실이 발생할 수 있기 때문에 자동 형변환 안됨.
int i = (int)3.14f; //OK. 수동형변환. 

1. byte --> int //자동형변환 OK.

2. int --> byte //자동형변환 불가.

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

예외

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

int i = 100;
byte b = i; //에러. i는 변수이므로 위에 선언을 했지만, 어떤 값이 들어올지 모름. 
byte b = (byte)i //OK. 수동형변환 필요

byte b = 1000; //에러. byte타입 범위를 벗어난 값의 대입
byte b = (byte)1000; //OK. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.

즉 값손실이 발생하는 경우는 자동형변환 불가.
값손실이 발생하지 않는 경우에만 컴파일러가 자동형변환.

산술 변환

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

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

long + int --> long + long --> long
float + int --> float + float --> float
double + float --> double + double --> double

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

byte + short --> int + int --> int //오버플로우 발생을 막기 위해
char + short --> int + int --> int

반올림 - Math.round()

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

나머지 연산자 - %

오른쪽 피연산자로 나누고 남은 나머지를 반환
나누는 피연산자는 0이아닌 정수만 허용(부호는 무시됨)

비교연산자

두 피연산자를 비교해서 true 또는 false를 반환

== //두 값이 같으면 true, 아니면 false
!= //두 값이 다르면 true, 같으면 false

문자열의 비교

문자열 비교에는 == 대신 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

논리 연산자 - && ||

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

|| (OR결합)
&& (AND결합)
x > 10 && x < 20
10 < x && x < 20 //이렇게 쓰는게 보기 좋다

논리 부정 연산자 - !

true -> false
false -> true

조건 연산자 - ? :

조건식의 결과에 따라 연산결과를 달리한다
result = (x > y) ? x : y; //조건식 ? 식1 : 식2, 괄호 생략 가능

대입 연산자

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

lvalue - 대입연산자의 왼쪽 피연산자, 저장공간(변수, 배열)
rvalue - 대입 연산자의 오른쪽 피연산자

복합 대입 연산자

i += 3; --> i = i + 3;
i *= 10 + j; --> i = i * (10 + j);
profile
안녕하세요!!

0개의 댓글