[Java] 변수와 자료형

Walter Mitty·2022년 10월 18일
0

KOSTA

목록 보기
3/33

자료형

변수

  • 변할 수 있는 값(data)이 저장되는 프로그램에서 할당해준 메모리 공간이다.
  • 문자값, 숫자값 등, 여러 종류의 data type이 들어갈 수 있다.

  • 기본형: 직접 값을 가지고 있는 구조
    • 숫자형:
      • 정수형: byte(1byte memory), short(2), int(4), long(8)
      • 실수형: float(4), double(8)
    • 문자형: char(2)
      • 문자조합(인코딩)
      • 2byte의 Unicode 기반(0~65535)
      • 모든 비트가 0으로만 채워져있으면 null값이다. (숫자타입은 모든 비트가 0으로만 채워져있으면 0이라는 값이 나온다.)
    • 논리형: boolean(1)
      • true, false만 저장 가능하다.
  • 참조형: 직접 값을 가지진 못하고 값을 갖는 메모리를 참조하는 구조
    • 배열

ex) int type 변수를 만들고 싶다면,

int a; // type과 변수 이름을 적어준다.
a = 10; // 가능
a = 10.3; // 불가능

int 타입인 변수 a는 정수로서 4byte 값만 가질 수 있다.

float b = 10.3; // 가능

컴퓨터에서 연산을 하려면 최소 4byte는 있어야한다. 또한 컴파일 단계가 아니라 실행을 해야 메모리가 확보된다.

System.out.println(1); // 1을 int로 받아들인다.
System.out.println(1.0); // 1.0을 double로 받아들인다.

실행할 땐 1은 int, 즉 4byte의 메모리가 확보,
1.0은 double, 즉 8byte의 메모리를 확보한다.

  • 참고로 컴파일러는 자료형에 맞는 바이트 메모리가 들어갔는지도 확인해준다
  • 오타도 확인해준다.

작은 type은 큰 type으로 (자동)형변환이 가능하다.
반대는 강제형변환을 해줘야한다.

short d;
byte e;
e = (byte)d;

자동형변환 가능

  • byte ⇨ short ⇨ int ⇨ long ⇨ float ⇨ double
  • char ⇨ int ⇨ long ⇨ float ⇨ double
  • 강제형변환 cast 연산자로 처리:
    ex)
int a = 10;
short b = (short)a;

int a를 short 변수에 castcade해서 집어넣을 수 있음
boolean은 형변환 안됨

float f;
f = 34.5; // 컴파일 에러가 난다.
f = 34.5f

그 이유는 34.5가 double 타입으로 컴파일 과정에서 인식 되기때문
그래서 f 붙여줘야한다.

배열

int[] arr;
arr = new int[5];

배열을 참조하는!

연습코드

public class Datatype {
  public static void main(String[]args) {
    byte b; //변수 선언
    b = 1;
    // 인트라고 선언하지 않았지만 인트보다 큰 애들은 인트로, 작은애들은...바이트타입으로?결정..됨...뭐라는겨
    b = 10;
    //b = 12.3;
    b = (byte)12.3;
    System.out.println(b);
    
    int i = b;
    System.out.println(i);

    float f = i;
    System.out.println(f);

    //f = 34.5 이건 double 타입으로 판단함 
    f = 34.5f;
    System.out.println(f);

    long l = 10;
    //l = 123456789123;
    l = 123456789123l;
    System.out.println(l);

    char c;
    c = 'a'; //a
    System.out.println(c);
    i = c; //97
    System.out.println(i);

    c = 98;
    System.out.println(c);

    boolean flag;
    flag = true;
    //flag = (boolean)1; 형변환 안됨~
    System.out.println(flag);
  }
}

0개의 댓글