2014-09-29 1 views
-1

캔 표현Java에서 상수가 아닌 원시 유형이 될 수 있습니까?

private static final String[] ARRAY = new String[]{"Word1", "Word2"}; 

는 자바에서 상수로 considred 수? 상수 유형 만이 상수가 아닌가? 이 경우 대문자 사용은 부적절하고 오도 된 것입니까?

편집 : 원래 잊어 버린 private static final 부분을 추가했습니다. 주어진 어레이가 변경 될 수 있음은 명백합니다. 이 질문의 이유는 코드에서이 (부적절한) 사용을보고 내 가정을 확인하기 위해서였습니다.

ARRAY = new String[]({"Word3"}; 

자본의 경우 문자 변수가 일정하지 않습니다 특히

+2

자신에게이 질문을하십시오. 'ARRAY'의 가치를 바꿀 수 있습니까? 그렇다면 상수가 아닙니다. – TheLostMind

+0

상수는 값을 변경할 수 없음을 의미합니다. 그래서 우리는 final 키워드를 사용합니다. private final static pie = 3.14. 그리고 변수는 그 값이 가변적이라는 것을 의미합니다. –

답변

3

, 이것은 배열에 액세스 할 수 있는지 있기 때문에, 당신은 쉽게 할 수있는, 일정하지 않습니다. final 수정은, 그러나, 수행합니다

final String[] ARRAY = new String[]{"Word1", "Word2"}; 

측면 참고로, 당신은 difference between constant and immutable objects 무엇을 체크 아웃 할 수 있습니다.

1

문자열은 원시 데이터 형식이 아니지만 (Char가 있지만) 기본 데이터 형식으로 몇 가지 방법으로 작동합니다. 따라서이 유형에 대해 final 키워드를 사용하면 상수가됩니다.

final String[] ARRAY = new String[]{"Word1", "Word2"}; 

그러나 원시 타입이 아닌 경우 final 키워드는 객체 속성을 final로 만들지 않으며 객체를 final로 참조하기 만합니다.

Bird를 생각해보십시오. 말하자면, 그것은 다리와 같은 속성을 가지고 있습니다. 당신이 새를 초기화하는 경우

Public class Bird{ 
int leg=2; 
setLegs(int legs){ 
this.legs=legs}; 
} 

지금, 기본적으로는 다리 = 2와 같은 속성을해야합니다, 키워드 마지막으로 앵무새를 말한다.

final Bird Parrot = new Bird(); 

Parrot.setlegs(3); 

3.

에 다리 번호를 변경합니다 : 이제 참조 (앵무새는 항상 새 입력을 참조한다)하지만 여전히처럼,이 개체의 속성을 변경할 수됩니다 최종

어쨌든
Public class Bird{ 
final int leg=2; 
setLegs(int legs){ 
this.legs=legs}; 
} 

, 난 그냥 예를 들어, 자기가 새 다리와 함께 연주 인정하지 않는 자신의 : 당신이 마지막도 다리 번호를 유지하려면

은, 당신처럼, 또한 다리 변수를 사용할 필요가!

+0

올바르지 않습니다. 배열 참조는 상수이며, 문자열은 변경할 수 없지만 배열을 쉽게 변경할 수 있습니다. 단어의 정상적인 의미에 따르면 그것은 일정하지 않습니다. –

2

Java에서 상수로 간주 될 수 있습니까? 변수가 final하지 않기 때문에

번호

첫째, 당신은 그것에 할당 할 수 있습니다.

두 번째로 변수를 final으로 선언하더라도 배열의 내용을 쉽게 변경할 수 있습니다. 모든 Java 배열은 변경할 수 있습니다.

상수 만이 아닌 기본 유형입니까?

실제로는 없습니다. final String 필드도 일정합니다. (심지어 상수 표현식에서 사용할 수 있습니다.)

실제로 불변 개체에 대한 참조를 포함하는 변수는 상수이기도합니다.

대문자 사용은 부적절하고 오도 된 것입니까?

예. 자바 스타일 가이드 라인에 따르면, 대문자 + 밑줄 패턴은 속성이있는 변수, 즉 staticfinal이며, 프리미티브 또는 변경 불가능한 객체에 대한 참조 중 하나입니다. 네 가지 예 모두가 네 가지 요구 사항 중 네 가지가 아닌 경우 적어도 세 가지 모두에서 실패합니다.