자바 기본 1

1c2·2024년 1월 15일
0

JAVA

목록 보기
1/13

자바의 데이터 타입

  • 기본형
  • 참조형

기본형

특징

  • 미리 정해진 크기의 데이터 표현
  • 변수 자체에 값

이 중 int형과 double형은 default이다
int와 같은 정수형 자료형은 overflow를 조심해야 한다. (-21억 ~ 21억)

double이나 float와 같은 실수형 자료에서는 계산 시 조심해야한다.

ex)

import java.math.BigDecimal;

public class Lang_02 {
    public static void main(String[] args) {
        float f1 = 2.0f;
        float f2 = 1.1f;
        float f3 = f1 - f2;
        System.out.println(f3);

        double d1 = 2.0;
        double d2 = 1.1;
        double d3 = d1 - d2;
        System.out.println(d3);

        System.out.println(((int) (d1 * 100) - (int) (d2 * 100)) / 100.0);

        BigDecimal b1 = new BigDecimal("2.0");
        BigDecimal b2 = new BigDecimal("1.1");
        System.out.println("BigDecimal을 이용한 빼기 : " + b1.subtract(b2));
    }
}

위 두 연산에 대해서 결과 값을 알아보자
f3는 0.9 / d3는 0.899999...가 출력된다.

이러한 문제는 데이터를 저장하는 방법에 의해서 발생되는데 이를 방지하기 위해 최대한int형으로 계산하는 것이 안전하다.

또는 bigDecimal과 같은 class를 활용하는 것도 방법이다.

형 변환

변수의 형을 다른 형으로 변환하는 것
기본형기본형 끼리 참조형참조형 끼리 형 변환이 가능하다.
기본형참조형의 형 변환을 위해 Wrapper클래스를 사용한다.

형 변환은 명시적 형변환묵시적 형변환 2가지가 있다.

명시적 형변환

  • 형 변환 연산자(괄호) 사용
  • 값의 손실이 발생 할 수 있음
int i = 300;
byte b = (byte) i; 

묵시적 형변환

  • 값의 손실 걱정이 없음
byte b = 10;
int i = (int)b //이건 명시적 형변환
int i2 = b; //byte형의 b의 값이 int형의 i2로 삽입 -> 묵시적 형변환

명시적 형변환 VS 묵시적 형변환

타입의 표현 범위가 커지는 방향으로 묵시적 형변환 가능

오른쪽 방향 (->)으로 묵시적 형변환이 가능하고
왼쪽 방향 (<-)은 명시적 형변환을 해야함

다음 연산이 틀린 이유는?

public static void main(String[] args) {
// 1
        byte b1 = 10;
        byte b2 = 20;
       
        byte b3 = b1 + b2;
// 2
        int i1 = 10;
        long l1 = 20;
        
        int i2 = i1 + l1;

// 3
        float f1 = 10.0;
        float f2 = f1 + 20.0;
    }
  1. b1 + b2연산에서 byte는 int보다 작은 자료형 이므로 int로 계산 하지만 int형의 결과를 byte형인 b3에 저장하는 과정에서 오류 발생
int b3 = b1 + b2
  1. long의 결과를 int에 캐스팅이 안됨
long i2 = i1 + l1
  1. 일단 float f1 = 10.0f로 형태를 명시해 줘야한다.
    그리고 덧셈 시 double의 결과가 나오므로 f2를 double로 선언해야 한다.
    =>double이 기본형이고, 이항 연산자는 두개의 피 연산자 중 큰 타입으로 형 변환 후 연산 진행
float f1 = 10.0f;
         double f2 = f1 + 20.0;

| 와 || 차이

  • | 는 무조건 다 함
  • ||는 앞에가 true이면 그만

=> short circuit연산자
만약 || 연산자 뒤에 연산자에 값을 변경하는 경우 앞에서 true이면 수행 X

public static void main(String[] args) {

       int a = 10;
       int b = 20;
       System.out.println((a > b) & (b > 0));

       System.out.println((a += 10) > 15 | (b -= 10) > 15);
       System.out.println("a = " + a + ", b = " + b);

       a = 10;
       b = 20;
       System.out.println((a += 10) > 15 || (b -= 10) > 15);
       System.out.println("a = " + a + ", b = " + b);
   }

switch 연산자

switch에 들어갈 수 있는 자료형 :
정수형 자료형 (int, long, char ...) + String

boolean이나 실수형 자료형(double, float)은 안된다.

참조형

0개의 댓글