변수 할당방식 - 리터럴과 new 연산자 차이

devguri·2023년 4월 20일
0
post-thumbnail

클래스와 인스턴스

  • 클래스 : 필요한 속성과 행위를 멤버변수와 메서드로 정의하는 것, 객체 만들어내기 위한 틀
  • 인스턴스 : 클래스를 정의한 것으로 실제 메모리를 할당받아 데이터화 한 객체 (실제로 사용하는 것)

변수 할당 방식

  1. 리터럴 사용한 방식
  2. new 연산자 이용한 방식

변수 선언시 new 키워드를 사용하는 것과 그냥 선언하는 것의 차이는 무엇일까요 ?

✍️ new 연산자 VS Literal 방식

  1. new 연산자
    • new를 통해 선언시 Heap 영역에 존재
    • 같은 변수를 할당시 다른 메모리 공간에 할당됨
  2. 리터럴 방식
    • 변하지 않는 값을 의미한다.
    • 리터럴 방식을 통해 선언시 heap 메모리 영역에 있는 string constant pool이라는 영역에 생성됨
    • a=10 일때 10이라는 것은 변하지 않는 고정적인 값으로, 리터럴이라고 부름
    • 같은 값에 선언시 같은 주소를 가리키게 된다.
  • new 키워드 사용하기

    String one = new String("example");
    String two = new String("example");

  • 리터럴 방식 사용

    String one = "apple";
    String two = "apple";

-> 이렇게 new를 사용하게 되면 one과 two는 다른 주소를 할당 받고, 리터럴 방식을 사용한 경우, 두 변수의 메모리 주소 값이 동일하게 나온다.

equals VS '=='

위의 변수 할당 방식에 따라 데이터 비교 방식과 결과가 달라진다.

public class cmp {
    public static void main(String[] args) {
        String str1 = "hyeons";
        String str2 = new String("hyeons");
		
        if(str1 == str2) {
            System.out.println("두개의 값이 같음.");
        } else {
            System.out.println("두개의 값이 같지 않음.");
        }
        
        if(str1.equals(str2)) {
            System.out.println("두개의 값이 같음.");
        } else {
            System.out.println("두개의 값이 같지 않음.");
        }
    }
}
  1. '==' 연산자
  • 비교하고자 하는 두개의 대상의 주소 값을 비교한다.
  • 위의 코드에서 str1, str2는 다른 주소를 가리키고 있기 때문에 서로 다르다는 결과를 얻을 수 있다.
  1. equals() 연산
  • 비교하고자 하는 두개의 대상의 값 자체를 비교한다.
  • str1과 str2는 주소는 다르지만 값자체는 같기 때문에 서로 값이 같다는 결과를 얻을 수 있다.
profile
Always live diligently

0개의 댓글

관련 채용 정보