2014-09-10 3 views
0

내가 문자 배열 초기화 할 때 알고 :자바 배열을 초기화하고 다른 초기화를 수행 하시겠습니까?

char[] b = new char[5](); ? 
:
char[] b= new char[5]({1,2,3,4,5}); 

는 왜 안

ArrayList<Charset> list = new ArrayList<Charset>(); 

배열 초기화 좋아 을 내가

char[] b= new char[5]; 

또는

에 있습니다

왜 다른가요? 그것은 자바 철학적 자연이거나 그 뒤에있는 몇 가지 이유입니까?

답변

0

을 변경할 수 있습니다, C++ 벡터와 유사한 컨테이너의있다 단순한. C에서 배열을 만드는 방법은 스택에 요소 수를 포함 할 수있는 크기의 정적 메모리를 할당하고 포인터로 첫 번째 요소를 가리 키거나 힙에 동적 메모리 길이를 지정합니다 포인터로 첫 번째 요소를 가리 킵니다.

int a[5]; //stack, static allocation 

int* a = (int*)malloc(sizeof(int)*5)); //heap, dynamic allocation 

그리고는 C++에, 두 번째 버전은 무슨 일이 일어나고 있는지 더 분명 분명하기 때문에,이 변경되었습니다 :

int* a = new int[5]; 

그리고 그들은 자바에 걸쳐 배열 생성의이 유형을했다 . 심지어 작성 및 반사로 조작하는 객체를 조작하기 위해 다른 Array 클래스를 사용하는 이유

int[] a = new int[5]; 

Arrays 정말 따라서, 일반적인 객체처럼 작동하지 않습니다. 그들은 자바에서 대부분의 것들처럼 그냥 일상적인 클래스이기 때문에

ArrayLists는, 다른 (http://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html 참조), 그래서 당신은 실제 생성자 호출을 초기화 : 기본적으로

List<T> = new ArrayList<T>(); 

, 배열 및 클래스는 그냥 작동 다른 방법들.

0

배열과 ArrayList는 다른 용도로 사용됩니다. 개체의 고정 된 크기 컬렉션이 필요하다면 배열로 이동하지만 동적으로 커지는 개체 모음이 필요한 경우 arraylist로 이동하십시오. 어떤면에서는 컴파일러가 당신의 필요성을 알아야하기 때문에 구문이 다릅니다.

+0

하지만 배열도 객체라고 생각하나요? – AlexWei

+0

@AlexWei : 좋습니다.확실하지는 않지만이 구문이 생성자 호출을 숨길 가능성이 높습니다. – Dici

+0

배열은 프리미티브/객체의 연속적인 집합입니다 –

0

이것은 단지 Java의 디자인입니다. ArrayListArrays은 서로 다른 두 가지입니다. 동일한 선언이 필요하지 않습니다.

0

자바를 만든 사람은 C 구문과 유사한 구문을 유지하려고합니다. Java에서 배열은 최소 수준의 저수준 객체이므로 해당 경우가 약간 다릅니다.

0

ArrayList를, 그것은, 그 대답은 상당히이다가 추가 요소를 제거하지만, 당신이 이제까지 C 사용했다면 배열의 크기

+0

초기화에 중점을 둔 질문에 대답하지 않습니다 – Dici

관련 문제