2015-01-20 2 views
3

Java에서 상수를 사용하여 배열을 선언 할 때의 이점은 무엇입니까?상수를 사용하여 배열 크기를 선언 할 때의 이점은 무엇입니까

private int[] items = new int[2]; 

참고 :이 선언되면 배열의 길이를 변경할 수 없습니다 예를 들어,

private static final int CAPACITY = 2; 
private int[] items = new int[CAPACITY]; 

위의 코드와의 차이 무엇입니까. 왜 내가 상수를 사용해야합니까? 같은이 길이 왜

+2

[마법 수는 무엇이며, 왜 그렇게 나쁘습니까?] (http://stackoverflow.com/questions/47882/what-is-a-magic-number-and-why-is-it) -bad) – Raedwald

답변

9

CAPACITY이 다른 곳에서 사용하고, 당신이 결정하는 미래의 경우 때문에 CAPACITY은 4 여야하며 모든 곳에서 변경할 필요가 없습니다.

for(int i=0;i<2;i++) 

for(int i=0;i<CAPACITY;i++) 

에 :
  • 쉽게 비교

유지하는 코드의 가독성을 향상 가능한 한 코드 마법 번호.

많은 자바 클래스는 Integer, Character 이상의 클래스를 사용합니다.

+1

대신 배열 길이를 사용할 수도 있습니다 (for 루프의 경우). 그러나 나는 다른 점들에 동의한다. – Tom

+1

@ 톰 여기에 길이를 써야 겠지만, 나는 그것을 쓸 것이지만, (int i = 0, n = items.length; i Alnitak

+0

예를 들어, 더 명확한 예가있을 수 있습니다. – Maroun

7
  1. 당신은
  2. 이 명확하게 다른 배열이 상수를 사용할 수 있습니다 STUDENTS_MAX_SIZE = 1000
3

차이점은, 상수, 예를 들어, 의미있는 이름으로 명명되어있는 경우 :

private int[] items = new int[DEFAULT_CART_ITEM_AMOUNT]; 

및/또는 일정이 다른 곳에서 사용하는 경우, 예를 들어 :

for(var i = 0; i < DEFAULT_CART_ITEM_AMOUNT; ++i) doSth(); 
3

당신에게 이 번호가 코드의 다른 위치에 나타날 가능성이 있고 나중에 값이 변경 될 수있는 경우 숫자를 대체하기 위해 상수를 사용할 수 있습니다.

에 의미 적 의미을 부여하는 데 사용할 수도 있습니다.

2

"상수를 사용하는 이유는 무엇입니까?"

  1. 유지 코드 깨끗한
  2. 개발 중에 일정을 변경
  3. 쉽게

기본적으로 두 가지 시나리오가 있기 때문에 당신은 일반적으로, 배열의 길이에 대한 상수를 필요가 없습니다
+1

상수는 매우 드물게 메모리를 저장하지 않습니다 – Alnitak

+0

하지만 여러 곳에서 하드 코딩 같은 것을 추가하면 메모리가 필요하지 않습니까? – Keshava

+2

@Keshava 아니요, 동일한 바이트 코드가 생성됩니다. – Maroun

0

:

  1. 저장소에 항목의 양은 예를 들어, 매우 간단 사전에 알려져있다 : int[] monthlyRevenues = new int[12]; 있습니다 static final int NUMBER_OF_MONTHS = 12;

  2. 사전에 알려져 있지 않다 저장하는 항목의 금액을 12 개월, 그것은 어리석은 것,이 경우에는 List 같은 다른 모음을 사용하는 것이 아마 더 낫다. 만약 당신이 명시 적 길이 배열을 설정하는 자신을 발견하고 그 길이가되어야하는 이유가 바로 식별 할 수없는 경우

, 당신은에 길이를 리팩토링으로 해결되지 않는 아마 다른 문제를 가지고 상수.

1

주된 이유는 읽기 쉽고 유지 보수 용이성입니다. 숫자 리터럴을 사용하면 코드를 읽고 이해하고 편집하기가 더 어려워집니다.

그러나 기호 상수를 사용하여 숫자 리터럴의 의도가 분명하면 코드 가독성이 저하 될 수 있습니다.

String litteral (또는 다른 Object)의 경우 고유 한 String 상수 대신 여러 개의 동일한 String 리터럴을 사용할 때 메모리 오버 헤드가 있음에 유의하십시오.

관련 문제