답변:
언어에 따라 다릅니다.
- 예를 들어, C 및 C와 같은 언어 ++, 당신은 내장 스칼라 유형의 숫자가 int
, float
, double
, char
그들이 간단한 구성 요소로 분해 될 수없는 이러한 의미에서 "원시"있다, 등. 이러한 기본 유형에서 포인터 유형, 배열 유형, 구조체 유형, 공용체 유형 등 새로운 유형을 정의 할 수 있습니다.
그런 다음 구식 Lisp와 같은 언어가 있습니다. 여기서 모든 것이 원자 또는 목록 입니다. 다시, 상기 정의에 의해, 원자는 더 단순한 것으로 분해 될 수 없다는 의미에서 "원시적"이다.
편집하다
내가 아는 한, "원시", "기본"및 "내장"이라는 용어는 거의 호환됩니다. 그래도 정말 독창적이기를 원한다면 "내장"(언어 정의에 의해 명시 적으로 제공되는) 유형과 여전히 "기본"또는 "기본"인 내장 유형에서 파생 된 유형을 구별 할 수 있습니다. 그것들은 더 간단한 요소들로 분해 될 수 없다는 점에서. Ctypedef
기능을 사용하면 기존 유형의 새 유형 이름을 작성할 수 있습니다. Ada를 사용하면 제약 조건이있는 새 스칼라 유형을 만들 수 있습니다. 예를 들어 [-90.0, 90.0] 범위 밖의 값을 사용할 수 없다는 제약 조건이있는 내장 부동 유형에서 Latitude 유형을 파생시킬 수 있습니다. 더 간단한 컴포넌트로 나눌 수 없다는 점에서 여전히 기본 또는 기본 유형이지만 사용자 정의 형식이므로 "내장"유형으로 간주되지 않습니다.
다시, 이러한 개념은 약간 모호하며 실제로 상황에 따라 다릅니다. 예를 들어, "내장"유형의 개념은 BLISS와 같은 유형이없는 언어에는 의미가 없습니다.
char
기본 유형과 String
복합 유형 을 만드는 더 작은 값으로 문자를 분해 할 수 없습니다 .
로부터 자바 관점 :
Java에서는 기본 유형과 비 기본 유형이 매우 명확합니다.
기본 유형의 변수는 해당 유형의 값을 직접 포함합니다 (즉, 값 유형 ).
기본이 아닌 유형의 변수는 값을 직접 포함하지 않습니다. 대신, 객체에 대한 참조 (포인터와 유사)입니다. Java에서는 사용자 정의 값 유형을 작성할 수 없습니다.
자바는 여덟 기본 유형이있다 : byte
, short
, int
, long
, char
, boolean
, float
와 double
. 다른 것은 기본이 아닌 유형입니다.
String
는 언어에서 특별한 지위를 가지고 있습니다 (리터럴을 얻습니다.의 서명으로 main
, JLS에서 명시 적으로 허용하는 것으로 생각되는 인턴이 있고 자동으로 사용할 수 있습니다).하지만 기본 데이터 유형 은 아닙니다 . 내장 이라고 부를 수 있습니다 .
프리미티브는 다른 데이터 유형으로 구축되지 않은 기본 데이터 유형입니다. 하나의 단일 값만 나타낼 수 있습니다. 모든 프리미티브는 필요에 따라 내장 데이터 유형이지만 (컴파일러는 알아야 함) 모든 내장 데이터 유형이 프리미티브 인 것은 아닙니다.
일부 언어에서는 컴파일러가 특별한 방식으로 처리 할 수 있어야하므로 다른 유형으로 작성된 특정 유형에 대한 기본 지식을 가지고 있습니다. Delphi와 Visual Basic의 변형 (및 Boo와 "Duck")과 대부분의 OO 언어의 기본 객체 클래스를 예로들 수 있습니다.
왜 "문자열"유형이 Java가 아닌 SNOBOL4에서 기본 유형으로 간주됩니까?
Java 언어 사양은 Java 컨텍스트에서 "primitive"라는 단어의 의미를 매우 명확하게 지정하고 Java String
는이 사양을 준수하지 않지만 SNOBOL4 언어 사양은 SNOBOL4 및 SNOBOL4의 문자열 컨텍스트에서 "primitive"의 의미를 정의합니다. 해당 사양을 준수합니다.
더 이상 아무것도 없습니다. 각 언어의 사양은 특정 단어의 의미와 그 설명에 맞지 않는 단어를 정의합니다. 예를 들어, C 언어 사양은 매우 명확하게 무언가로 단어 "기능"의 의미를 정의 하지를 어떤 단어 "기능"보통 의미하지만 단어가 C 지역 사회 내에서 사용되는 방법입니다.
'primitive'데이터 유형은 메모리에 저장된 값이 있음을 의미합니다.이 값에는 메소드 나 내부 구조가 없습니다. 프리미티브는 외부 작업으로 만 작동 할 수 있습니다.
Java에서 기본 요소는 숫자 (int, long 등) 및 char입니다. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
당신의 가치가 구조를 가지고 있다면 (나는 여기서 스트럿을 생각하고 있습니다), 그것은 원시적이 아닙니다. 메소드 (객체 또는 클래스)가있는 경우 기본이 아닙니다.
int
데이터 형식 에는 메서드 가 있습니다.
var myString = 3.ToString();
( Int32.ToString () 참조 ). 참고 것을 int
C #이 인에 동의어 에 대한 Int32
, 즉 Int32
이다 원시적 형 (자바, 달리 Integer
다릅니다 int
). 따라서 3.ToString()
C #에서는 권투 가 필요 하지 않습니다 !
나는 몇 가지 정보를 발견했고 그것이 다른 대답에 도움이 될 것이라고 생각했다. 공유하고 싶습니다-
위키 백과는 말합니다-
컴퓨터 과학에서 기본 데이터 유형은 다음 중 하나입니다.
기본 유형 은 프로그래밍 언어에서 기본 빌딩 블록으로 제공하는 데이터 유형입니다. 대부분의 언어는 기본 유형에서 시작하여 더 복잡한 복합 유형을 재귀 적으로 구성 할 수 있습니다.
내장 유형 은 프로그래밍 언어가 내장 지원을 제공하는 데이터 유형입니다.
대부분의 프로그래밍 언어에는 모든 기본 데이터 유형이 내장되어 있습니다. 또한 많은 언어가 복합 데이터 유형 세트 (Java의 "문자열"유형)도 제공합니다.
이런 식으로 말하고 싶습니다-
기본 데이터 유형은 더 이상 분류 할 수없는 데이터 유형입니다 ( "문자열"유형은 "char"에서 만들 수 있지만 char은 어떤 데이터 유형으로도 "분할"될 수 없습니다 (대부분의 프로그래밍에서) 언어)이므로 기본 데이터 유형입니다.
SNOBOL4의 문자열 유형은 기본으로 간주됩니다. 정확한 이유를 모르겠습니다. SNOBOL4의 기본 기능뿐만 아니라 기본 기능입니다.
Java 스펙에서는 기본 유형으로 간주되는 데이터 유형 목록을 명확하게 언급합니다. 문자열 유형은 사양 이 아니기 때문에 기본 제공 유형 임에도 불구하고 Java의 기본 데이터 유형이 아닙니다.
프리미티브는 언어 자체에서 제공하는 기본 데이터 유형입니다. C 언어의 예는 int, float, char 데이터 형식입니다. 언어의 기본 부분으로 제공됩니다.
프리미티브는 사용자 정의 변수 또는 객체입니다. 예를 들어 데이터를 저장하는 객체를 정의하거나 C의 구조체를 사용하여 변수를 정의 할 수 있습니다. 그것들을 사용하기 위해 먼저 정의해야했기 때문에 기본이 아닙니다.
예 : 직원, 학생, a_very_large_number_that_you_defined_yourself
설명을 추가하고 설명을 주석 으로 작성 기본 요소는 원래 언어와 함께 제공되는 변수로 생각되며 C ++의 String과 같은 변수는 New 키워드를 사용하여 선언해야합니다. 그것은 그것을 객체로 만들어 문자열이 원시가되지 않도록합니다.
답변 : 당신은 아마도 변수의 구현과 관련이 있습니다. 언어 핵심의 일부라면 원시적입니다. 그렇지 않으면 그렇지 않습니다. 예는 C ++의 문자열입니다. 이것은 핵심 변수가 아니며 New 키워드를 사용하여 선언됩니다. 따라서 원시적이지 않습니다.
string
데이터 유형을 제공하지 않습니다 . 문자열은 기본 유형의 집계로 표시됩니다 char
. C ++은 적절한 string
데이터 유형을 도입 했지만 "기본"유형인지 여부는 사용자의 요청에 따라 다릅니다. 개인적으로 나는 그것을 분류하지 않을 것입니다. 그러나 나는 구식 BASIC 문자열 유형을 기본 유형으로 분류 할 것입니다. 아마도 완전히 임의적 인 이유가 있습니다.