728x90

 

객체 배열

객체를 담는 배열

배열의 자료형을 클래스명(사용자 정의 자료형)으로 지정하여 활용

 

선언

자료형[] 배열명;

자료형 배열명[];

클래스명[] 배열명;

클래스명 배열명[];

 

할당

배열명 = new 자료형[길이];

배열명 = new 클래스명[길이]

자료형[] 배열명 = new 자료형[길이];

클래스명[] 배열명 = new 클래스명[길이];

 

 

 

초기화

배열명[인덱스] = 값;

배열명[인덱스] = new 클래스명();

 

iArr[0] = 10;

tArr[0] new Trainee();

iArr = {1,2,3};

tArr = {new Trainee(),new Trainee()};

 

 

선언과 동시에 할당 및 초기화

클래스명 배열명[] = {new 클래스명(), new 클래스명()};

 

 

객체 배열의 메모리 작동

선언된 변수명이 stack에서 공간이 만들어지고, 거기서 할당되면서 heap에서 공간이 생성되는데

이때,  배열 하나의 주소 안에서 배열의 각 인덱스번호 별로 주소가 다시 나눠지는 구조

 

728x90
반응형
728x90

 

StringBuffer & StringBuilder 클래스는

불변 클래스인 String 클래스랑 다르게 문자열 수정이 가능한 가변 클래스다

 

String이 수정이 불가능하다니 무슨 말일까?

String 타입의 변수에 값을 넣어보면 언제든 바꿀 수 있는걸 알 것이다. 근데 사실 이게 데이터 자체가 수정되는게 아니라 시스템 내부에서는 String 타입의 변수에 값이 들어오면 메모리에 새로운 공간과 주소값을 생성시키고 기존의 것을 삭제하고 대체하는 식으로 작동한다. 그럼 주소값도 달라지고 눈에 보이는건 수정된 걸로 보이지만 말이다. 근데 이 둘 StringBuffer & StringBuilder은 말그대로 데이터 자체를 수정시킨다. 주소값 변함없이.

 

String 클래스와 이 둘의 차이

 - String : 변경이 적고 읽기만 많은 경우에 유리. 수정불가.

 - StringBuffer & StringBuilder : 문자열에 대한 수정이 많이 일어나는 경우 유리. 수정가능.

 

StringBuffer & StringBuilder의 차이는?

StringBuffer 동기화 o / 상대적으로느림 / 안전

StringBuilder 동기화 x / 빠름

둘이 동기화처리 빼고는 기능이 모두같다

동기화가 들어가면 상대적으로 안전하다. 데이터에 대해 락을 걸어놓고 진행하기에 처리속도가 상대적으로 느릴 수 있고 동기화가 안들어가면 락이 없어 그마만큼 속도가 다소 빠르다.

 

StringBuffer & StringBuilder

메모리 관리를 위해 에전에는 String대신 쓰기도 했다고 하나 요새는 성능들도 많이 좋아지고 String을 대개 많이쓴다고한다. 퍼나빌더를 쓴다고 눈에띄게 빨라지는게 아니라고 한다. 또한 자동으로 수용량(capacity)가 증가한다.

 

 

StringBuffer 안에 쓸 수 있는 많이 쓰는 메소드들

1) append()

받아온 값을 뒤에 추가로 이어주는 메소드

 

2) insert()

원하는 자리에 값 추가 시킬 수 있는 메소드

 

3) delete()

데이터 삭제하는 메소드

delete(int start, int end) : StringBuffer

deleteCharAt(int index) : StringBuffer

 

4)reverse()

앞뒤 거꾸로 값을 바꿔놓는 메소드

 

728x90
반응형
728x90

1. hashCode()

hashCode() : int ← 매개변수x 주소값 반환

Returns a hash code for this string.

주소값을 보기 위해 사용하는 코드

객체의 주소값을 해시코드로 구현한 결과값

 

2. identityHashCode()

System.identityHashCode(변수명)

실주소값을 연산해놓은 결과값을 도출하는 메소드

 

728x90
반응형
728x90

 

※ Call by reference & value

 

1) call by reference

주소값이 기준. 이 때문에 객체를 불러오면 주소값을 불러온다      

ex) class, 객체object 
        
String a = "100";         
String b = a;       # 같은 주소값

(만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2) call by value

기본적으로 대상의 주소값을 가지지 않고 '값(value)'을 할당받는 형태 

ex) int, float, double 같은 primitive type들

728x90
반응형

+ Recent posts