on
참조 변수(String, 배열)
참조 변수(String, 배열)
참조변수의 비교연산
기본 타입 변수의 비교연산(==, !=)은 변수의 값이 같은지, 아닌지를 비교하지만 참조 타입 변수들은 동일한 객체를 참조하는지 아닌지를 비교한다.
참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하는 것이 된다. 동일한 주소값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미이다.
null과 NullPointerException
참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있다.
null값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조변수는 스택영역에 생성된다.
참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없다. 왜냐하면 참조 타입 변수를 사용한다는 것은 객체를 사용하는 것을 의미하는데, 참조할 객체가 없으므로 사용할 수가 없는 것이다. ( null값을 가진 참조 변수를 사용하려고 할 경우 NullPointerException이 발생하게 된다.)
String 타입(참조)
String 변수는 참조 타입이기때문에 초기값으로 null을 대입할 수 있다.(참조하는 객체가 없다는 뜻)
String 변수에는 문자열을 저장한다.(문자열은 String객체로 생성되고 변수는 String객체를 참조한다.)
String 변수에 문자열을 저장하려면 큰 따옴표로 감싼 문자열 리터럴을 대입해야한다.
String str = "Hello Java World";
문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어있다.
변수에 문자열을 저장할 때 문자열 리터럴을 사용하는 것이 아닌 new연산자를 사용해서 직접 String객체를 생성시킬 수 있다.(new연산자는 힙 영역에 새로운 객체를 만들 때 사용하는 연산자로 객체 생성 연산자라고 한다.)
String str = new String("안녕하세요");
new연산자를 이용해 객체 생성 시 똑같은 문자열이 들어갔다하더라도 ==의 연산 결과는 false가 나온다.(변수에 저장된 객체의 번지가 다르기 때문)
문자열만 비교할 때는 equals()메소드를 이용해야 한다.(equals() 메소드는 원본 문자열과 매개값으로 주어진 비교문자열이 동일한지 비교 후 true또는 false를 리턴한다.)
boolean result = str.equals(str1);
배열타입
배열은 같은 타입의 많은 양의 데이터를 다루는 프로그램에서는 좀 더 효율적인 방법이 필요해서 나온 것이다.
같은 타입의 데이터를 연속된 공간에 나열시키고 각 데이터에 인덱스(index)를 부여해 놓은 자료구조이다.
배열의 각 인덱스는 각 항목의 데이터를 읽거나, 저장하는데 사용된다.
같은 타입의 데이터만 저장할 수 있다.
선언과 동시에 저장할 수 있는 데이터 타입이 결정된다.(다른 타입의 값을 저장하려고하면 타입 불일치오류가 생긴다.)
한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다.
배열 변수는 참조변수이고 배열은 객체이기때문에 배열은 힙 영역에 배열변수는 힙 영역의 배열 객체를 참조한다.
null값으로 초기화가 가능하다.
대괄호 []는 배열 변수를 선언하는 기호로 사용된다. 타입 뒤나 변수 뒤에 붙을 수 있다.
int[] intArray; int intArray[];
배열 변수를 이미 선언한 후에 다른 실행문에서 중괄호를 사용한 배열 생성은 허용되지 않는다.
배열 변수를 선언한 후, 값 목록들이 나중에 결정되는 상황이라면 new연산자를 사용해서 값 목록을 지정해주면 된다.
String[] names = null; names = new String[] {"홍길동", "홍길은", "홍길금"};
new연산자로 배열 생성
new연산자로 배열을 처음 생성할 경우, 배열은 자동적으로 기본값(선언된 해당 타입의)으로 초기화된다.
값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new연산자로 만들 수 있다.
int[] intArray = new int[5];
배열 길이
배열의 길이란 배열에 저장할 수 있는 전체 항목 수를 말한다.
배열의 길이를 얻으려면 배열 객체의 length필드를 읽으면 된다.(필드는 객체 내부의 데이터)
length 필드는 읽기 전용 필드이기 때문에 값을 바꿀 수가 없다.
int[] intArray = {10, 20, 30}; int len = intArray.length;
배열 사용 시 배열의 인덱스 범위(배열의 길이)를 초과해서 사용하면 ArrayIndexOutOfBoundsException이 발생한다.
from http://fun-developer.tistory.com/63 by ccl(A) rewrite - 2021-10-13 23:27:44