2014-12-16 1 views
1

자바에서는 String을 직접 사용하여 문자열 변수 이름을 선언하고 값을 지정할 수 있습니다. String이 non-primitive 데이터 유형 임에도 불구하고 new 키워드를 사용하여 문자열을 배열로 정의 할 필요는 없습니다.Java에서 왜 String은 비 기본 데이터 형식입니까?

누군가 String이 비 기본 데이터 유형 인 이유를 설명해주십시오.

+0

솔직히이 사실이 너무 분명하지 않습니다. 청원서는 당신이 필요로하는 것을 명확히합니다 – Coffee

+0

왜 수입없이 String을 사용할 수 있는지 묻고 있습니까? 가능한 복제본 : http://stackoverflow.com/questions/7953987/java-string-import – rousseauo

+2

@rousseauo 해당 단어의 아무 곳이나 가져올 단어가 표시되지 않습니다. – csmckelvey

답변

0

문자열이 자바 객체가 아닌 기본 데이터 형식입니다. String은 java 프로젝트에서 기본적으로 가져온 java.lang 패키지의 일부입니다.

char 배열을 정의 할 필요가 없습니다. 단지 String을 사용하십시오.

가능한 중복 : Java String import

1

문자열, 목적은 당신이 개체 자체를 변경할 수는 없지만 객체에 대한 참조를 변경할 수 있음을 의미 불변이다. 문자열

평소와 같이
String myStr = "test"; 

이, "테스트"라는 문자열을 만들고 작동하고 그것을 참조 "myStr"를 할당하는 방법

이입니다.

여기에서 유의해야 할 점은 String 개체는 변경 가능하지 않지만 참조 변수는 변경되지 않습니다.

10

StringJavadoc은 StringObject의 서브 클래스임을 명확하게 나타냅니다. 또한 String.equals(Object) 우선 Object.equals(Object)을 재정의합니다.

JLS-3.10.5. String Literals

문자열 리터럴은 큰 따옴표로 묶어야 0 개 이상의 문자로 구성되도록 지정합니다.

또한, JLS-4.3.3. The Class String는 String 클래스의

인스턴스 유니 코드 코드 포인트의 시퀀스를 나타냅니다 추가합니다.

String 개체는 상수 (변경되지 않음) 값을가집니다.

문자열 리터럴 (§3.10.5)은 String 클래스의 인스턴스에 대한 참조입니다.

문자열 연결 연산자 + (§15.18.1)는 결과가 컴파일시 상수식이 아닌 경우 (§15.28) 암시 적으로 새 String 개체를 만듭니다.

또한 어레이가 Object (s)이고 An Array of Characters is Not a String 인 것도 지적 할 가치가 있습니다. 마지막으로 StringObject이 아닌 경우 null이 될 수 없습니다.

13

클래스는 메서드 만 가질 수 있기 때문에 문자열은 프리미티브가 아닙니다. 원시물은 할 수 없습니다. 그리고 String은 substring, indexof, equals, touppercase처럼 처리되는 동안 많은 함수가 호출되어야합니다. 그것은 수업을 만들지 않고는 불가능했을 것입니다.

또한 클래스를 사용하면 풀링을 허용하여 보안 및 효율성을 향상시키기 위해 문자열을 변경 불가능하게 만들 수 있습니다.

+0

고마워. 내가 필요한 대답을 얻었다. –

1

'원시적 인'과 '문자 적'을 혼동스럽게 생각합니다. 프리미티브는 객체가 아닌 데이터 유형입니다. 리터럴은 데이터 유형의 비트 패턴을 설명하는 편리한 방법입니다. 예를 들어 -1은 int에 대한 비트 패턴 0xFFFFFFFF를 설명하고 'a'는 16 비트 (0x0061)의 소문자 A에 대한 유니 코드 코드 포인트를 설명합니다. 리터럴은 원시 데이터 유형을 설명하는 데에만 국한되지 않습니다. 배열을 설명 할 수 있습니다. 예 : int[] a = {1, 2, 3};.

문자열 리터럴은 일부 메소드가 첨부 된 불변의 문자 배열을 설명하는 방법 일뿐입니다. 리터럴은 그렇지 않으면 매우 복잡 할 수있는 것을 설명하기위한 문법적 설탕입니다. 예를 들어 :

String s = "ab"; 

보다 훨씬 간단합니다 : 자바에서

char[] c = new char[2]; 
c[0] = 'a'; 
c[1] = 'b'; 
String s = new String(c); 
1

, 문자열의 위치를 ​​저장하는 객체이다 문자열의 위치의 실제 "값".

다른 배열을 만드는 것처럼 문자열 배열을 만들 때 new 키워드를 사용해야합니다.

String[] text = new String[4]

이의 텍스트가에서의 위치로 컴퓨터를 인도 네 개의 문자열 참조을 만들 수 있습니다. 또한 모든 문자열의 기본값은 null입니다. 메모리 주소에 저장할 값을 지정하기 전까지 저장할 문자열이 없습니다.

-1

문자열은 유형에 관계 없으므로 비 프리미티브입니다. 예를 들면 : - "S"는 샤아와 "D"저장 그것의 데이터 형의 종류를 포함 할 수 있도록 가치와 "C"는, 모든 종류의 주조 또는 아무것도없이 혼합을 포함 int로 포함

String s= "abs"; 
String d= "123"; 
String c= "12as"; 

. 이 대답이 충분하기를 바랍니다. 더 이상의 정리가 있으면 언제든지 물어보십시오.

+0

@gamitg 다시 포맷 해 주셔서 감사합니다. –

1

문자열은 문자열 풀에서 값을 지정할 때마다 개체를 만듭니다. 비슷한 오브젝트를 생성 할 때마다 그 오브젝트를 찾아 참조 할 것이며, 그 값이 없으면 새로운 오브젝트를 다시 작성합니다. String Pool에 대해 더 공부하면 차이점을 자동으로 알게 될 것입니다.

관련 문제