2011-03-29 5 views
10

Java에서 "변수가 초기화되지 않았을 수 있습니다"오류가 발생하지 않도록 String 메소드 (로컬) 변수를 초기화하는 가장 좋은 방법은 무엇입니까?Java String 메소드 (로컬) 변수를 null 또는 ""로 초기화해야합니까?

String s = null; 또는 String s = "";

변화가 있습니까? 그렇다면 어떤 것이 더 낫고 그 이유는 무엇입니까?

나는 웹에서 상충되는 답변을 읽었습니다.

감사합니다.

+0

모든 답변을 제공해 주셔서 감사합니다. 자세한 정보는 ... String을 반환하는 웹 서비스 메서드를 디자인했습니다. 특정 조건에 따라 String에 값이 할당되지만 항상 그런 것은 아닙니다. 그 일이 발생하면 null 또는 ""을 반환해야합니까? – Canam

답변

14

네, 차이가 있습니다. 하나는 빈 문자열에 대한 참조이고, 하나는 null 참조입니다. 그들은 동일하지 않습니다.

어느 것이 더 낫습니까? 그것은 null 값이나 빈 문자열에 대한 참조를 원하는지 여부에 달려 있습니다 ... 그들은 다르게 행동하므로 원하는 방식으로 행동하는 것을 선택하십시오.

변수에 "더미"값을 할당 할 필요가 거의 없습니다. 일반적으로 선언 지점에서 변수를 초기화하는 경우 실제 값을 사용하는 것이 좋습니다. 더 많은 컨텍스트를 제공 할 수 있다면 코드 구조를 개선하는 데 도움이 될 수 있으므로 문제는 아닙니다.

+0

각각의 이점이있는 상황을 제공 할 수 있습니까? ' ""로 초기화하는 다른 답변들로부터 수집 한 것은 NPE를 피하는 데 도움이되지만 잡히지 않은 버그를 초래할 수도 있습니다. – Abdul

1

모두는 프로그램에서 수행 할 작업에 따라 다릅니다. 때로는 문자열이 이미 설정되어 있는지 여부를 확인하는 것이 유용 할 수 있습니다 (null). 다른 번에 ""을 더 좋게 만드는 NullPointer를 방지하려고합니다.

0

정말 프로그램에서 무엇을하는지에 달려 있습니다.

""(빈 문자열)은 문자열로만 연결되며 null보다 안전합니다. String 클래스 (예 : replaceAll(), indexOf())에서 메서드를 호출하면 프로그램이 올바르게 작동합니다. 그러나 null을 가졌을 때 메서드를 호출 할 때마다 NullPointerException이 발생합니다.

응용 프로그램의 문자열 빈 값이 나쁘지 않은 경우 str = ""을 선택하십시오.

응용 프로그램에서 유효하지 않은 상태를 알고 있기 때문에 NullPointerException이 Throw되었을 때 매우 유용하므로주의해서이 문자열을 기본적으로 null로 설정해야합니다.

+1

""로 문자열을 초기화하면 나중에 버그를 찾기가 더 어려워 질 수 있습니다. 그것은 모두 기본 컨텍스트에 따라 다릅니다. –

+0

나는 그것이 규칙이라고 생각하지 않는다. 상황에 따라 다르며 ""에 대해 true를 반환하는 StringUtils.isEmpty와 null이 있다는 것을 알아 두십시오. – smas

0

null 문자열을 피하기 위해 Java에서 String을 ""로 초기화하는 것을 선호합니다. null 포인터는 null 대신 ""을 할당하여 제거 할 수있는 많은 오버 헤드를 추가합니다.

+3

""에 대한 문자열 초기화가 나중에 버그를 찾기가 더 어려워 질 수 있습니다. 그것은 모두 기본 컨텍스트에 따라 다릅니다. –

+2

Null을 String의 기본값으로 선택했기 때문에 NPE가 발생하면 코드에서 기본 대소 문자를 처리하는 것을 잊었거나 잘못 처리했음을 의미합니다. 대신 빈 문자열로 설정하면 버그를 숨기거나 나중에 진단하기가 어려운 곳에서 IMO를 표시합니다. –

2

가능한 한 많은 필드를 최종 생성하거나 클라이언트가 불량 또는 불완전한 객체를 인스턴스화하지 않도록 기본값을 사용하는 것이 가장 좋습니다. 입력란이 기본적으로 빈 문자열 인 경우 (즉, 논리 오류가 발생하지 않음) 모든 방법으로 그렇게합니다. 그렇지 않은 경우, 클라이언트가 올바르게 인스턴스화되지 않은 객체의 메소드를 호출 할 때 null이 예외를 throw합니다.

일반적으로 클라이언트 코드가 작성 중에 완전한 객체를 생성하도록하십시오. 문자열이 생성시에 있어야하는지 모를 경우 매개 변수로 전달해야합니다. 문자열이 내부 논리에 사용되는 경우 로컬 변수 또는 매개 변수로 더 좋을 수 있습니다.이 경우에는 일반적으로 isEmpty()보다 null이 더 많기 때문에 null을 선호합니다.

0

대부분의 경우 다음과 같이 말할 것입니다 : 선언 할 때 로컬 변수를 초기화하지 마십시오. "" 또는 null과 같은 더미 값일 수 있습니다. 실제 값을 입력하거나 넣을 때까지 기다리십시오.

그러면 컴파일러는 변수를 사용하기 전에 하나 이상의 할당이 있는지 확인합니다. 드물게 컴파일러가이 문제를 해결할만큼 똑똑하지 않은 경우는 거의 없습니다 (로컬에서 사용할 수없는 정보가 필요하기 때문에). 일부 초기화를 사용하고 일반적으로 null은 잘못되었을 때 NullPointerException과 함께 표시되기 때문에 더 좋습니다 . (assert s != null을 추가 할 수 있습니다.이 시점에서 초기화를 수행해야합니다.

관련 문제