JAVA
[Java] 자바 기초와 실수하기 쉬운 부분
이불속곰팡이
2024. 1. 15. 10:01
1. char의 크기
자바에서 char형은 UTF양식을 사용하므로 2byte(16bit)의 크기를 갖는다.
2. Over/Under flow
최대 값을 벗어나는 연산은 overflow를 일으키므로, 큰 수를 다룰 때는 주의할 것.
int num = Integer.MAX_VALUE;
System.out.println(num+1); // -2147483648
num = Integer.MIN_VALUE;
System.out.println(num-1); // 2147483647
3. 실수형 정밀도에 의한 오차
실수 연산은 부정확하므로, 계산할때는 반올림하거나 범위에 의한 연산을 고려해야 함.
if(2.0-1.1 == 0.9){
System.out.println("True");
}
else{
System.out.println("False"); //False가 나온다
}
4. 형변환은 같은 타입(primitive/reference)끼리만 가능하다.
단, boolean타입은 다른 primitive 타입과 호환되지 않음.
int i = 1;
boolean b = (boolean)i; // error
if(i){} //error
5. 명시적 형변환 시 값의 손실/오차가 발생할 수 있음.
큰 범위 -> 작은 범위 / 실수형 -> 정수형으로 갈 때는 프로그래머 책임 하에 형변환 진행
int num = (int)(2000000000L*3);
System.out.println(num); // 1705032704
6. 비트연산자와 논리연산자에 따른 short circuit
논리연산자의 경우 short circuit 발생으로 뒤의 연산이 적용 안 될 가능성 파악하기.
int a = 100;
int b = 100;
(a+=50) == 200 & (b+= 50) == 150 // a=150, b=150
(a+=50) == 200 && (b+= 50) == 150 // a=150, b=100, (a+=50)==200에서 short circuit 발생으로 뒤의 연산이 발생하지 않음.
7. switch 구문에는 byte, short, char, int와 해당 타입들의 wrapper 클래스, enum만 가능
byte, short, char, int, enum, String, Character, Byte, Short, Integer
8. array const 할당은 선언과 동시에 이루어질때만 가능하다.
int[] arr;
//arr = {1,2,3,4,5,6}; // error
arr = new int[6];
int[] arr = {1,2,3,4,5,6};
9. 2차원 이상의 배열은 꼭 모든 하위 배열의 크기가 같을 필요가 없다.
int[][] arr = new int[2][];
arr[0] = new int[2];
arr[1] = new int[3];
10. String과 다른 변수들을 연산할 때 순서에 주의하자
primivite 타입과 string을 더하면 string으로 된다.
그러나 앞에서부터 연산이 되는 것에 주의하기.
int a = 22;
int b = 33;
System.out.println(""+a+b); // 2233 | ""+22+33 -> "22"+33 -> "2233"
System.out.println(a+b+""); // 55 | 22+33+"" -> 55+"" -> "55"
11. 생성자를 만들면 기본 생성자는 제공되지 않는다.
...클래스 내용...
SampleClass(int a){
this.a = a;
}
}
//클래스 생성
SampleClass(1)
SampleClass() // error