-
[Java] 토막글Programming/Java 2020. 3. 11. 23:39
변수
변수(Variable) 는 값(Value)이 저장된 메모리의 위치(주소)에 붙여진 이름
데이터를 저장하기 위한 메모리 공간으로 그릇에 비유할 수 있다.
Java 자료형에는 기본 자료형(primitive type)과 참조형(reference type)이 있다.
자료형
기본 자료형에는 정수, 실수, 문자, 논리값 등과 같은 자료형이 있고,
참조 자료형에는 배열, 클래스, 인터페이스 등이 있다.
기본 자료형 변수는 그것이 나타내고자 하는 값을 가지고 있는 반면, 참조 자료형 변수는 값에 대한 메모리 주소를 가지고 있다.
리터럴
리터럴은 데이터 그 자체를 뜻한다. 변하지 않는 데이터를 의미하는 것
예를들어, int a = 1; 에서 a는 변수, 1는 리터럴이다.
문자열 리터럴은 이중 인용 부호(", ")로 지정하여 사용한다.
String 클래스
String 객체를 생성하는 방법에는 두 가지가 있다.
1. new 생성자로 생성하는 방법 // String str1 = new String("str");
2. 이중 인용 부호 안에 값을 입력하여 생성하는 방법 // String str2 = "str";
1번의 경우에는 str1은 Heap 영역에 존재하게 되고, 2번의 경우에 str2는 Heap 영역의 string constant pool이라는 영역에 존재하게 된다. 따라서 두 객체의 주소값은 다를 수 밖에 없다.
'intern()' 메서드를 사용하면 호출하는 String 객체의 문자열 값이 String constant pool에 있는지 찾아보고 있으면 해당 주소값을 반환한다.
2번 방법으로 String 객체를 생성하면 내부적으로는 intern() 메서드가 호출되어 이미 존재하는 경우에는 같은 String 객체를 가리키도록 주소를 return 한다.
string을 비교하는 연산에도 두 가지가 있는데 '==' 연산자는 객체의 주소값을 비교하고, 'equals()'는 리터럴을 비교한다.
Call by value vs Call by reference
123456789101112131415161718192021222324252627282930313233public class CallByValue {static class Num{public int n;public Num(int n){this.n = n;}}static void changeNumber1(int num) {num = 5;}static void changeNumber2(Num num) {num = new Num(5);}static void changeNumber3(Num num) {num.n = 5;}public static void main(String[] args) {int number1 = 0;changeNumber1(number1);System.out.println(number1); // 0Num number2 = new Num(0);changeNumber2(number2);System.out.println(number2.n); // 0Num number3 = new Num(0);changeNumber3(number3);System.out.println(number3.n); // 5}}cs 'Programming > Java' 카테고리의 다른 글
[Java] StringBuilder class 함수 (0) 2020.07.03 [Java] Collection (0) 2020.03.31 [Java] Hash, HashMap (0) 2019.12.31 [Java] String 함수 (0) 2019.11.15 [Java] 배열 오름차순, 내림차순 정렬 (0) 2019.11.15