참조형 객체, String, StringBuilder 비교해보기

2025. 4. 15. 21:01·Dev/Java
728x90
반응형

자바에서 기본형은 int, long, double, boolean 등이 있고

참조형은 클래스, 객체, String 등이 있다.

참조형 데이터는 메모리 주소값을 참조한다.

Student s1 = new Student("1번학생", 10, 10);
Student s2 = new Student("2번학생", 100, 100);

여기서 s1, s2에는 학생 객체의 “참조값”이 저장된다.

이 상황에서 만약 배열을 새로 만든 뒤 배열에 학생 객체를 넣는다면 어떻게 될까?

List<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);

배열에서 인덱스로 학생 객체에 접근해서 값을 바꾼다면 배열 안의 학생 정보만 바뀔까? 아니면 배열 바깥의 학생 정보도 바뀔까?

list.get(0).setName("아무개1");
list.get(1).setName("아무개2");

정답은 배열 안의 학생 정보, 배열 바깥의 학생 정보 둘다 값이 바뀐다.

System.out.println(s1.getName()); // 아무개1
System.out.println(s2.getName()); // 아무개2

왜 그럴까?

Student s1 = new Student("1번학생", 10, 10);
Student s2 = new Student("2번학생", 100, 100);

여기서 s1과 s2에는 각각 학생 객체의 주소값이 저장된다.

List<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);

그리고 배열에 객체를 넣을때도 그 “주소값”을 넣는다. 인스턴스를 새로 만들어서 넣는것이 아니다!

그래서 값을 변경할때도 바라보는 주소값이 동일하므로 배열 안, 밖 둘다 바뀌는것이다.

그런데 또 의문이 들었다..

String도 참조형인데 비슷한 실험을 해볼 수 있을까?

String str1 = "hello";
String str2 = str1;

str2 = "world";  

System.out.println(str1); // hello
System.out.println(str2); // world

예상한 결과가 나오지 않는다..

왜 그럴까?

str1 과 str2는 처음엔 같은 “hello” 문자열 객체를 참조한다.

이후 str2 = “world” 라고 하면, str2는 새로운 “world” 객체를 참조하게 되는 것이다.

String 은 immutable 불변하므로 hello객체가 변경이 되는게 아닌 다른 문자열 객체로 바꿔치기 되는 방식이 사용된다.

반대로 StringBuilder로 한다면?

→ StringBuilder는 mutable 가변객체이므로 진짜 객체 내부가 바뀐다.

StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = sb1;

sb2.append(" world");

System.out.println(sb1); // hello world
System.out.println(sb2); // hello world

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Dev > Java' 카테고리의 다른 글

[객체(17)] 실습9  (0) 2022.05.15
[객체(16)] 입출력, 스트림  (0) 2022.05.15
[객체(15)] 실습7, 실습8  (0) 2022.05.15
[객체(14)]  (0) 2022.05.15
[객체(13)] 실습5, 실습6  (0) 2022.05.15
'Dev/Java' 카테고리의 다른 글
  • [객체(17)] 실습9
  • [객체(16)] 입출력, 스트림
  • [객체(15)] 실습7, 실습8
  • [객체(14)]
블혜
블혜
  • 블혜
    Blehye Dev
    블혜
  • 전체
    오늘
    어제
    • 분류 전체보기 (133)
      • Dev (69)
        • Java (45)
        • HTML5 CSS3 (16)
        • Javascript (2)
        • 국비학원 (4)
        • Error! (2)
      • Algorithm (12)
        • PS (9)
        • Algorithm (3)
      • English (22)
        • Webtoon (6)
        • Grammar In Use (15)
      • DAILY (20)
        • Trip (10)
        • Musical (2)
        • Swimming (5)
        • Book (1)
        • Test (1)
      • etc. (10)
        • Display (10)
  • 블로그 메뉴

    • 홈
    • STUDY
    • DAILY
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    흰여울문화마을
    태종대
    SKCT후기
    SK하이닉스
    여자혼자여행
    송도해수욕장
    감천문화마을
    인적성
    부산혼자여행
    SKCT꿀팁
    혼자여행
    SKCT시험
    SKCT
    하이닉스
    홍대개미
    부산여행
    SKCT팁
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
블혜
참조형 객체, String, StringBuilder 비교해보기
상단으로

티스토리툴바