728x90
반응형
Java
1. 기본문법
1). 변수
- 타입에 따라 크기가 달라
- 타입
- 기본형 primitive type(8개) : 미리 정해진 크기의 데이터 표현 / 변수 자체에 값 저장
- 논리형 boolean
- 정수형 byte, short, int(32bit, 약 20억개 저장, 부호비트 → -128~127), long
- 실수형 float(32bit) double(64bit) → 정밀도 차이
- 문자형 char
- 참조형 reference type : 크기가 미리 정해질 수 없는 데이터의 표현 / 변수에는 실제 값을 참조할 수 있는 주소만 저장
- 기본형 primitive type(8개) : 미리 정해진 크기의 데이터 표현 / 변수 자체에 값 저장
변수 예제1
public class Lang_01 {
public static void main(String[] args) {
int i1 = Integer.MAX_VALUE;
int i2 = i1 + 1;
System.out.println(i2);
}
}
→ **** / integer의 최댓값에 +1 하면 → 범위 넘어가서 long의 가장 첫 단계로 넘어감
→ 오류가 발생하지 않음 / 단, 오버플로우기 때문에 데이터 크기를 고려할 필요는 있음
변수 예제2
public static void main(String[] args) {
float f1 = 2.0f;
float f2 = 1.1f;
float f3 = f1 - f2;
System.out.println(f3); //0.9
double d1 = 2.0;
double d2 = 1.1;
double d3 = d1 - d2;
System.out.println(d3); //0.899999999999~
}
→ float : 실수의 연산은 부정확하다. Why? : 유효 자릿수를 이용해서 반올림 처리하기 때문
- 실수를 정확하게 연산하려면?? → 정수로 만들어서 계산 / BigDecimal 사용
2). 형변환 Type Casting
- 변수의 형을 다른 형으로 변환 ex). char ↔ int
- primitive는 primitive끼리, reference는 reference끼리
- 단, boolean은 불가능
- 기본형과 참조형의 형 변환을 하려면? → Wrapper 클래스 사용
- Wrapper 클래스? : 기본형을 감싸주는 클래스로 총 8개
- 방법?
- 형 변환 연산자(괄호) 사용
- 명시적 형변환 : 자료 손실 발생 가능 - 큰값을 작은값에 넣을 때 ex. int→ byte
- int i = 300; byte b = **(byte)**i;
- 묵시적 형변환 : 자료 손실 발생 가능성X - 작은값을 큰값에 넣을 때 ex. byte → intbyte → short/char → int → long → float → double
- float이 long보다 데이터를 표현할 범위가 더 넓기 때문에 가능 / 타입의 크기가 아니다!
- short와 char는 둘 다 16bit인데, 왜 안될까? → char는 모든 bit를 데이터로 쓰고 있음, 서로 호환 불가능
- byte b = 10; int i = (int)b; // 써줘도 ㄱㅊ int i2 = b; // 생략해도 ㄱㅊ double d = 100.5; int result = (int)d; // result = 100 / d = 100.5
형변환 예제1
public static void main(String[] args) {
int i1 = Integer.MAX_VALUE;
int i2 = i1 + 1;
System.out.println(i2);
long l1 = i1 + 1;
System.out.println(l1);
long l2 = (long) (i1 + 1); // 이미 오버플로우 일어난 걸 형변환
System.out.println(l2);
long l3 = (long) i1 + 1; // 자바에서 연산할 때, 큰 타입으로 연산 진행 / 알맞는 연산
System.out.println(l3);
}
int i3 = 1000000 * 1000000 / 100000; //* 곱하기 진행시 이미 int의 범위 넘어서서 -> 깨짐
int i4 = 1000000 / 100000 * 100000; // 얘는 ㄱㅊ
형변환 예제2
public static void main(String[] args) {
byte b1 = 10;
byte b2 = 20;
// TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
byte b3 = b1 + b2; // Type mismatch: cannot convert from int to byte
int i1 = 10;
long l1 = 20;
// TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
int i2 = i1 + l1;
// TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
float f1 = 10.0; // float이라고 썼으니까, f를 붙여서 -> **10.0f;**
float f2 = f1 + 20.0;
}
Type mismatch: cannot convert from int to byte → int니까 byte에 할당할 수 없어!
- 최소단위가 int니까, byte에 할당할 수 없음
- int + long인 경우, 더 큰 데이터타입인 long에 맞춰서 long으로 바꿔서 할당
- 2개의 피연산자 중 큰 타입(float + double인 경우 → double에 맞춰)으로 형변환 후 연산 진행
형변환 예제2 알맞게 고친 것
byte b1 = 10;
byte b2 = 20;
int b3 = b1+b2;
int i1 = 10;
long l1 = 20;
long i2 = i1+l1;
float f1 = 10.0f;
double f2 = f1 + 20.0;
| / || 차이점
- | 앞 연산이 true여도, 뒤 연산 꼭 한다
- || 앞 연산이 true면, 뒤 연산은 하지 않고 그냥 → true
조건문에 들어갈 수 있는 표현식?
- if문 - boolean, Boolean(wrapper)
- switch문 - byte, short, char, int(+wrapper class / long 불가 - int 이하의 것만 가능), String, int
3). 반복문
2. 배열, 다차원 배열
1). 배열
- 동일한 타입의 데이터 0개 이상을 하나의 연속된 메모리 공간에서 관리하는 것
- int [] intArray; String [] nameArray; new int [3]; // int타입의 배열인데, 3개를 저장할 수 있음 newIntArray = new int[3]; // newIntArray에 할당
- 배열 요소의 초기화?
- 생성과 동시에 저장 대상 자료형에 대한 기본값으로 default 초기화
- 참조형 변수는 기본값이 null - 아무것도 참조하지 않으니까.
- char - ‘\u0000’
- boolean - false
- 생성과 동시에 초기화할 때 → 생략 가능
- 선언과 생성 따로할 경우 → new int[] 생략 불가능
- 배열 선언 → 배열 생성 → 참조값 할당 → 요소에 값 할당
- 참조형 변수에 배열의 주소를 할당~
- newIntArray[0] = 1;
- 메모리에 연속된 공간을 차지하기 때문에 → 크기 변경 불가
- int [] nums = {1,2,3}; nums = new int[] {1,2,3,4}; // 1) 설명 nums[1] = 100; // 2- 개별 요소는 다른값으로 변경 가능
- 배열은 최초 메모리 할당 이후, 변경 불가능 = immutable
- 배열 길이 조회는? → newIntArray.length
- 배열 출력은? → Arrays.toString()
배열 예제1
String org = "SSAFY";
char [] chars = new char[org.length()];
org.charAt(2) // org 문자열의 2번째 인덱스 값을 가져옴 -? 'A'
chars = org.toCharArray(); // char형을 char타입 배열로 변환
// chars[0] = 'S' / chars[1] = 'S' / chars[2] = 'A' ....
for (int i=0; i<chars.length; i++) {
System.out.print(chars[i]);
}
배열 예제2
int intArray[] = {1,2,3,4,5};
for (int x: intArray) {
System.out.println(x);
}
2). 다차원 배열 - 2차원 배열~
int [][] intArray;
int intArray [][];
int [] intArray [];
intArray = new int[4][3];
intArray[0][3] = 3;
int[] intArray = {{0,1,2}, {3,4,5}, {6,7,8}, {9,10,11}}
728x90
반응형
'⭐️ 개발 > JAVA' 카테고리의 다른 글
[JAVA] Maven, pom.xml (0) | 2024.01.13 |
---|---|
[JAVA/WEB] 웹 구동 원리 (0) | 2024.01.13 |
[개발] JAVA 기초 (0) | 2024.01.10 |