Data type
1. primitive
2. reference
3. variable declaration & variable assignment
4. casting
1. primitive (8가지)
- 논리형- 문자형
- 정수형
- 실수형
예) boolean boo = true;
- 변수 boo를 boolean이라는 data type으로 선언
- true값을 변수 boo에 대입
※ 3. 변수 선언, 변수 할당 참고
2. reference (기본형에 해당하지 않는 모든 타입은 참조 변수에 해당)
예) String[] args : args의 data type은 String = String[] 종류의 것을 담겠다
3. variable declaration & variable assignment
예) int i =73;
- i라고 하는 변수를 int라는 데이터 타입으로 선언
- 73을 i에 대입
4. casting
형변환의 기본
예) byte b1 = 10; - b1의 data type은 byte (1byte짜리)
byte b2 = 20;
byte b3 = b1 + b2; → 에러가 발생
- 에러가 발생하는 이유?
: 자바에서 내부적으로 연산시 정수형 기본 타입인 int로 변환하여 계산함
- 해결?: 명시적 형변환으로
byte b4 = (byte)(b1 + b2);
예) double d1 = 100+0.5;
- d1변수를 data type double로 선언하고 100+0.5 값을 d1에 대입
- d1을 출력하면 100.5 (정수형과 실수형의 연산: double은 8byte, int는 4byte)
- 묵시적 형변환: 정수형, 실수형에서 data type이 큰 쪽으로 변환
예) Casting2.java
예) Casting2.java
public class Casting2{ //class 이름과 파일 이름은 동일해야함
public static void main(String[] args){ //자바는 main method로 시작
//1. b1의 데이터 타입은 byte로 선언
//2. 100을 b1에 대입
byte b1 = 100;
//3. 20을 변수 b2에 대입
byte b2 = 20;
//byte b3 = b1+b2;
// b1, b2는 데이터 타입이 byte 지만 java 내부적으로 계산될 때 기본은 int값으로 이루어진다 따라서 데이터 타입이 다르기때문에 에러 발생
// byte b4 = (byte)b1+b2;
//b1은 byte타입임을 명시했지만 b2는 int값으로 그대로 계산 따라서 byte + int는 int로 묵시적 형변환 = 결국 데이터 타입이 달라서 에러 발생
byte b5 = (byte)(b1+b2);
System.out.println("b5: "+b5);
byte b6 = (byte)(b1+b5);
System.out.println("b6: "+b6); // b1+b5 = 220이므로 byte 타입이 표현할 수 있는 -128~127의 값에 해당이 되지 않으므로 쓰레기 값이 도출됨
System.out.println("===================================");
int i1 = b1+b2;
System.out.println("i1: "+i1); //120
int i2 = b1+b5;
System.out.println("i2: "+i2); //b1, b2, b5는 데이터 타입이 byte지만 자바 내부에서 계산은 int타입으로 이루어진다 - 그걸 int 타입으로 선언한 i1, i2에 대입하는 건 문제가 없다 - 묵시적 형변환
//220
int i3 = i1+b5;
System.out.println("i3: "+i3); //int타입인 i1과 byte타입인 b5가 연산을 하면 묵시적 형변환의 특성상 데이터 타입이 큰 int 타입으로 자연스럽게 계산이 이루어짐(자바 내부 정수형 기본 타입이 int라는 것도 생각하자)
//240
System.out.println("===================================");
double d1 = 133 + 0.3;
System.out.println("d1: "+d1); // int타입인 133 + double타입(실수형 기본타입은 double) 0.3을 계산 - 데이터 타입이 더 큰 double로 계산 - 묵시적 형변환
// int i4 = 143.4; //데이터 타입이 달라서 에러 발생
// System.out.println("i4: "+i4);
int i5 = 200/3;
System.out.println("i5: "+i5); //200/3은 66.6666....이지만 자바 내부에서 계산하는 정수형은 int값으로 산출된다. (소숫점 이하 자리는 날아감)
double d2 = 200/3;
System.out.println("d2: "+d2); // 66을 double로 선언된 d2에 넣으면 원래 나와야 하는 소숫점 .666...이 되살아 나는 것이 아니라 실수형으로 표현될 뿐이다 (데이터 손실)
double d3 = (double)200/3;
System.out.println("d3: "+d3);
double d4 = (double)(200/3);
System.out.println("d4: "+d4); //200/3을 먼저 연산 - 66이 산출(int값이 기본형이므로) 그 후에 double로 데이터 타입을 표현해 봐야 소숫점 아래 값은 형식적으로 표현하게 됨
}// end of main
}// end of class
| cs |