이게 절대 끝이 아니다!!!!!!!!!!!
계속 내용에 살을 붙일거다!!!!!!!
제목을 다른 말로 바꿔보자면 위와 같다.
자료형
은 변수의 타입에 따라 값이 저장된 공간의 크기와 저장 형식을 정의
하는 역할을 한다.
(여기서 변수
는 값을 저장할 수 있는 메모리 상의 공간)
자료형은 2가지로 나뉜다.
- 기본형(primitive) => int => 말 그대로 그
값
을 저장하는
(ex. int, long, char, byte)- 참조형(reference) => Integer =>
주소값
을 저장
(ex. class, interface)
아직 호구마인 나는, 값과 주소값이 도대체 어디에 저장되는지 좀 궁금했다. 그래서 또 찾아봤다. 아니 참조형은 말 그대로 주소값에서 값을 '참조'해와서 참조형인건지 뭔가 궁금하기도 했고..?
이래서 객프 수업을 더 열심히 들었어야 해
기본형 변수 선언
int val = 10
참조형 변수 선언
Integer val = new Integer(10)
이렇게 두개를 선언했다고 치면 값이 어떻게 저장될까?
자바 메모리 영역은 method(static)
-> stack
-> heap
영역으로 나뉜다.
여기서 stack영역은 런타임 시 메서드 내에서 생성된 기본형 변수 값(지역변수, 매개변수)을 저장해준다. 메서드가 호출될 때 할당되고 종료하면 그대로 사라진다. 따라서 위에서 선언한 val, 즉 10은 이곳에 val이라는 이름으로 4바이트 영역에 저장된다.
heap 영역은 런타임시 동적으로 할당되는 영역으로, 참조형 변수 및 배열이 이곳에 저장된다. 마찬가지로 위에서 선언한 참조형 변수 val도 stack 영역에 저장되지만, 그 안에는 주소값이 저장된다. 그 주소값을 찾아 heap으로 들어가면 원하는 주소 안에 10이라는 값이 저장돼있다.
(new
라는 명령어는 heap에다가 주어진 주소에 값을 저장할 새로운 공간을 만들라고 지시한다)
기본타입
을 객체로 표현하기 위해 사용되는 클래스가 java.lang에 있는 wrapper
클래스이다.
- 기본 자료형을 객체로 변환할 수 있다.
(메서드에 전달된 인자를 수정할 때 객체가 필요)- 거의 모든 패키지의 class는 generic type을 인자로 받는다.
- collection 프레임 워크의 자료 구조는 객체만 저장할 수 있으며, 이 wrapper 클래스를 활용해 언박싱, 자동 박싱을 한다.
(Boxing : 기본->참조형 변수로 /
ex. Integer num = Integer.valueOf(1))
** 최근(Jdk 1.5이후)에는 AutoBoxing, unBoxing이 가능해짐!
따라서 ex. Integer num = 1로 써도 무리가 없음
==
, !=
연산자를 사용할 수 없고 참조
를 비교해야 하므로 equals
를 사용해줘야 한다String
이 두 문자열을 비교할 때 str1.equals(str2)
를 해준 이유가 이 때문인듯)https://colossus-java-practice.tistory.com/7
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%B3%80%EC%88%98%EC%9D%98-%EA%B8%B0%EB%B3%B8%ED%98%95-%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85
https://velog.io/@yh20studio/Java-%EA%B8%B0%EB%B3%B8%ED%98%95-%EB%B3%80%EC%88%98%EC%99%80-%EC%B0%B8%EC%A1%B0%ED%98%95-%EB%B3%80%EC%88%98
멋져요!!! 앞으로 자주 방문하겠습니당!