착각하기 쉬운 몇가지 예제

착각하기 쉬운 몇가지 예제

0. if( boolean) 만 가능
if( 1 ) {

    //1 이 정수형이라서 에러
}
//while 등도 확인 필요

1. 증감연산자

//단독으로 쓰일때는 동일

int i = 5;
i++;
++i;

메소드나 표현식에 포함될때
int k= 5;
System.out.println(++k);
System.out.println(k);
// 6, 6이 출력

int m = 5;
System.out.println(m++);
System.out.println(m);
// 5, 6이 출력

2. 정수현 연산자
int a = 1000000;
int b = 2000000;
long c = a * b;
// int * int 이기때문에 overflow
long c = (long)a * b; 해야 원하는 결과를 얻을 수 있다.

//char 타입의 리터럴에 직접 정수를 연산하면, int 타입으로의 변환이 일어나지 않는다.
char c2 = ‘a’ + 1; // 라인 6 : 컴파일 에러없음
System.out.println(c2);

3. 이항 연산자
byte a = 10;
byte b = 20;
byte c = a + b; // int + int 이기 때문에 overflow
byte c = (byte)a + b; // overflow

byte c = (byte)(a + b);

4. 비교 연산자
10.0d == 10.0f -> 10.d == 10.d -> true
double형 경우에는소수점 첫번째 자리에 따라서 정밀도가 변경된다.
(.0으로 끝나는 경우에만 정밀도 향상)

0.1d == 0.1f -> 0.1d == 0.1d -> false;

double d = (double)0.1f;
System.out.println(d); // 0.10000000149011612

(float)0.1d == 0.1f -> 0.1f == 0.1f -> true

5. 나머지 연산
10 % 8 -> 2
10 % -8 -> 2
-10 % 8 -> -2
-10 % -8 -> -2

6. 쉬프트 연산자
x << n 은 x * 2^n과 같다.
x >> n 은  x / 2^n과 같다.
곱셈, 나눗셈보다 연산 속도가 빠르다.

7. 배열에서 문법 오류
C style로 사용할때 다음과 같은 차이점이 있다.
int[] score = {100, 90, 80, 70, 60}; //OK
int[] score;
score = {100, 90, 80, 70, 60} //에러 발생(아래 참조)

int add( int[] arr) { return 1;} 과 같은 메소드가 있다면
int result = add( {100, 90, 80, 70, 60} ); // 에러 발생
int result = add( new int[] {100, 90, 80, 70, 60} ); //OK

자바에서 사용하는 권장하는 스타일
int[] score = new int[] {100, 90, 80, 70, 60};
int result = add( new int[] {100, 90, 80, 70, 60} ); //OK

Leave a Reply

Your email address will not be published. Required fields are marked *