[Java] int vs Integer / boolean vs Boolean

쓰옹·2022년 11월 17일
0

📙 Java 잡아🤏

목록 보기
4/25

튜터님의 설명을 들으면서
int와 Integer
boolean 과 Boolean의 차이가 뭘까?
의문이 생겼다.

🤷‍♀️ 왜 어떨 땐 int고 어떨 때 Integer일까?


일단 intboolean

기본자료형! primitive type이다

  • 그 외에도 byte, char, short, long, float, double 해서 총 8개가 있다.

특징

  • 산술 연산 가능
  • null로 초기화 불가능
public class Main {
    public static void main(String[] args) {
        int i = null;
        System.out.println(i);  //에러발생
    }
}

error: incompatible types: <nulltype> cannot be converted to int : int는 nulltype과 양립불가능 하다.



그럼 IntegerBoolean

래퍼 클래스(Wrapper class)로 참조자료형이다.

래퍼 클래스(Wrapper class)

: 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스

  • 프로그램에 따라 기본 타입의 데이터를 객체(Object)로 취급해야 하는 경우가 있다.
       1. 매개변수로 객체가 요구 될 때
       2. 기본형 값이 아닌 객체로 저장해야 할 때
       3. 객체간의 비교가 필요할 때
  • 기본 타입의 데이터를 그대로 사용할 수 없기 때문에 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 한다.
기본형Wapper class
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

특징

  • 산술 연산 불가능

    래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로,
    인스턴스에 저장된 값을 변경할 수 없다.
    단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고,
    생성된 인스턴스의 값만을 참조할 수 있다.

  • null로 초기화 가능

Boxing , Unboxing

  • 박싱(Boxing): 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정
  • 언박싱(UnBoxing) : 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정
  • 연산도 가능해짐!

예시

public class Main {
  public static void main(String[] args) {
      Integer num1 = new Integer(7); //박싱
      Integer num2 = 2;             //오토박싱
      Integer num3 = 7;

      int int1 = num1.intValue();  //언박싱
      int int2 = num2;             //오토언박싱

      Integer result1 = num1 + num2;
      Integer result2 = int1 - int2;
      int result3 = num1 * int2;

      System.out.println(result1);
      System.out.println(result2);
      System.out.println(result3);

      System.out.println(num1 > num2);       //true
      System.out.println(num1 == num3);      //false
      System.out.println(num1.equals(num3)); //true

		System.out.println(System.identityHashCode(num1));  //705927765
      System.out.println(System.identityHashCode(num3));  //366712642
  }
}
  • 오토 박싱/언박싱: 자바컴파일러가 자동으로 박싱/언박싱 처리해줌.

    • 박싱해서 사용하면 불필요한 박싱이라고 알려줌
  • 비교연산도 가능하지만

    • 래퍼 클래스도 객체이므로 ==동등연산자를 사용하면 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 된다.
    • 따라서 언제나 false 반환
  • 인스턴스에 저장된 값의 동등 여부를 정확히 판단하려면

    • .equals() 메소드 사용
  • System.identityHashCode(): 주소값 확인 메소드







    🧐reference

    Wrapper 클래스
    [Java]기본형(primitive type)과 참조형(reference type) (feat.Integer와 int 차이점)

profile
기록하자기록해!

0개의 댓글