티스토리 뷰

Programming/JAVA

Data type

청소부 2019. 3. 6. 17:07


1. primitive type (기본형)

- boolean

- byte

- short

- char

- int

- long

- float

- double



2. reference type (참조형)

- 기본형에 해당하지 않는 경우는 모두 다 참조형에 해당

 예) String[] args : 변수 args의 data type은 String = String[] 종류의 것을 담는 args라는 이름의 그릇



3. variable declaration & variable assignment

 예) int variableIntTest = 73;

 → 변수 variableIntTest의 data type은 int

     73이라는 숫자를 variableIntTest 변수에 담겠다



4. casting



 예) 명시적인 형변환


byte b1 = 10;         //b1의 data type은 byte (1byte짜리)
byte b2 = 20;
byte b3 = b1 + b2;  //에러 발생
 
//자바에서 내부적으로 연산 시에는 정수형 기본 타입인 int형으로 변환하여 계산
//위 에러는 명시적인 형변환을 통해 해결할 수 있음
 
byte b4 = (byte)(b1 + b2);
cs



 예) 묵시적인 형변환


double d1 = 100 + 0.5;
 
//d1변수를 data type double로 선언하고 100+0.5 값을 d1에 대입
//d1을 출력하면 100.5 (정수형과 실수형의 연산: double은 8byte, int는 4byte)
//묵시적 형변환: 정수형, 실수형에서 data type이 큰 쪽으로 변환
 
cs



 예) 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

 


'Programming > JAVA' 카테고리의 다른 글

조건문  (0) 2019.03.20
연산자  (0) 2019.03.20
몇 가지 기본 규칙  (0) 2019.03.06
Compile  (0) 2019.03.06
개발 환경 구축  (0) 2019.03.05
댓글