programing

문자열이 기본 유형입니까?

goodjava 2023. 6. 4. 18:41

문자열이 기본 유형입니까?

나는 끈과 원시적인 종류가 궁금합니다.이와 같은 글에서는 문자열이 원시 유형이라고 합니다.그러나 MSDN의 두 번째 기사는 문자열을 원시 유형으로 나열하지 않습니다.

그러나 두 번째 기사에서 제공한 코드를 실행하면 String이 Primitive 유형이 아니라고 표시됩니다.

누가 이것에 대해 안내해 줄 수 있습니까?

두 기사 모두 문자열이 원시 유형이 아니라고 말합니다.그렇지 않습니다.

두 번째 기사에서 예제 코드를 컴파일하여 실행하면 다음과 같이 출력됩니다.

문자열이 기본 형식이 아닙니다.

제 생각에 이것에 대한 혼동은 새로운 문자열을 만드는 구문이 값 유형을 만드는 것과 유사하다는 것입니다.

값 유형을 정의할 때 이들은 모두 동일합니다(32비트 시스템에서).

System.Int32 a = new System.Int32(5);
System.Int32 a = 5;
int a = 5;

참조 유형 문자열을 만들 때와 마찬가지로:

System.String s = new System.String(new char[]{'h', 'e', 'l', 'l', 'o'});
System.String s = "hello";
string s = "hello";

또한 문자열이 참조 유형인 경우에도 값별로 비교할 수 있습니다.

s == "hello";//true

이것은 여전히 문자열을 기본 유형으로 만들지 않습니다.

질문에 대한 수락된 대답은 당신에게 그것에 대한 세부사항을 제공할 것입니다.

원시 유형이 무엇인지에 대한 "Microsoft" 정의는 없습니다.

지정된 컨텍스트에는 기본 유형의 정의만 있습니다.

  • CLR은 원시 유형을 다음과 같이 정의합니다.
    • System.Boolean
    • System.Byte
    • System.SByte
    • System.Int16
    • System.UInt16
    • System.Int32
    • System.UInt32
    • System.Int64
    • System.UInt64
    • System.IntPtr
    • System.UIntPtr
    • System.Char
    • System.Double
    • System.Single
  • )에서는 " VB.NET 사 10(션 7.3) " 본을기" 해따당 "유형유형 " 로섹정의 " 다니합사 " 수있유않해 " 가할용 " 형을고 " 다당져 " 을 " 지 " 오 " 음 " 도 " 라 " 서 " 은 " 습 " 니 " 다 " 으 " 가 " 진 " 워 " 드 "System네임스페이스)에서 해당 유형의 인스턴스를 리터럴로 정의하고 이러한 유형을 상수로 사용할 수 있도록 허용합니다. VB.NET의 기본 유형은 다음과 같습니다.
    • System.Byte
    • System.SByte
    • System.UInt16(UShort)
    • System.Int16(Short)
    • System.UInt32(UInteger)
    • System.Int32(Integer)
    • System.UInt64(ULong)
    • System.Int64(Long)
    • System.Single
    • System.Double
    • System.Decimal
    • System.Boolean
    • System.DateTime(Date)
    • System.Char
    • System.String
  • C# 사양(버전 4)은 일부 유형에 대한 키워드 별칭을 정의하고 일부 값에 대한 리터럴을 지정하는 방법도 정의합니다. 또한 상수 식에서 사용할 수 있는 유형을 별도로 정의합니다. C# " 본에유형 " 페단에다 " 장순 4.1.4: 형유입니이 "(" " - (""""에서 으로 됩니다.string에 언급되지 않았습니다.

    • System.SByte(sbyte)
    • System.Byte(byte)
    • System.Int16(short)
    • System.UInt16(ushort)
    • System.Int32(int)
    • System.UInt32(uint)
    • System.Int64(long)
    • System.UInt64(ulong)
    • System.Char(char)
    • System.Single(float)
    • System.Double(double)
    • System.Boolean(bool)
    • System.Decimal(decimal)

CLR은 두 포인터 유형을 모두 원시형으로 보고, VB.NET과 C# 모두 소수점을 원시형/단순형으로 보고, VB.NET만 DateTime을 특별한 것으로 보고, VB.NET과 C# 모두 문자열에 대한 키워드 별칭과 리터럴 구문을 가지고 있지만 VBNET만 지정합니다.String"원초적 유형"인 반면, C#은 단순히 사양의 일부를 전용으로 합니다.System.String...

결론적으로, 다른 맥락들은 "원시적 유형"이 무엇인지에 대한 다른 정의를 가지고 있습니다.그것은 중요하지 않습니다. 프로그래밍 언어를 사용하는 방법을 배우면 됩니다. 그런 다형성 단어에 대해 싸우고 생각하는 것은 의미가 없습니다. 저는 왜 인 지 궁금합니다.Type.IsPrimitive심지어 존재합니다.

에 대해서는System.String:

  • CLR: 특별한 것은 없습니다. 단지 참조 유형일 뿐입니다.
  • VB.NET: 원시 유형입니다.
  • C#:String눈송이입니다; 것체자매특눈별한송입다니이그우의;

Change-of-Stance 업데이트:코드가 거짓말을 하지 않기 때문에 아닙니다.

Console.WriteLine(typeof(string).IsPrimitive); => False
Console.WriteLine(typeof(int).IsPrimitive); => True

-----.-----------------------------------------------------------
하지만 온라인의 일부 문서는 String을 원시적인 것으로 취급하는 것 같습니다.저는 예라고 생각합니다 - "원초적"의 다음 정의에 근거합니다.(제 개인적인 정의는 구성요소 유형으로 더 이상 나눌 수 없는 유형입니다.하지만 우리는 여기서 그저 '시선적'으로 행동하고 있을 뿐이며, 저에게는 대부분 문제가 되지 않습니다.)

C#의 모든 원시 데이터 유형은 시스템 네임스페이스의 개체입니다.각 데이터 유형에 대해 짧은 이름 또는 별칭이 제공됩니다.

출처: http://msdn.microsoft.com/en-us/library/ms228360%28VS.80%29.aspx 다른 찬성 기사 - MSDN Magic 기사

요약: 명확하게 정의되지 않은 원시에 대한 당신의 정의에 따라 답이 달라지는 것 같습니다.출처:다른 SO 스레드에서 에릭 리퍼트.

.NET은 (기사에서) 다음을 정의합니다.

기본 유형은 부울, 바이트, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Char, Double 및 Single입니다.

그래서 아닙니다. 내장된 것이고 매우 중요합니다. 네, 하지만 원시적인 것은 아닙니다.

VB는 CLI와 C#에 대해 약간 다른 정의를 사용합니다.

Microsoft의 "기본" 정의에 따르면 문자열은 기본 유형으로 간주되지 않습니다.반면에 Microsoft는 명확하거나 일관성 있는 정의(예: "관리되지 않는 리소스")를 만들지 않고 용어를 사용하는 경향이 있으며, "String", "Array" 및 "Object"를 포함하는 "기본"을 유용하게 정의할 수 있습니다. 이러한 용어가 없는 경우 이를 효율적으로 에뮬레이트할 수 있는 유형을 정의할 수 없기 때문입니다.

아니요, 문자열이 기본 형식이 아닙니다.

하지만, 그것은 원시적인 유형들과 공통적인 몇 가지 특징을 가지고 있습니다.

할 필요가 없습니다.String하는인스를 new문자열 개체를 가져오는 키워드입니다.

또한다음사문연자수있결다습니할을열용여하을▁▁the다를 사용하여 문자열을 하는 기능도 됩니다.+가 컴일러전는연산자하환출에 대한 String.Concat방법.

문자열은 불변이며, 이는 대부분의 상황에서 원시 유형과 마찬가지로 값 유형 의미를 가지고 있음을 의미합니다.

문자열은 특수한 기본 형식입니다.값 형식은 아니지만, 예를 들어 / "안녕하세요"와 같이 리터럴을 작성하여 만들 수 있고 형식 문자열의 상수를 선언할 수 있으므로 원시 형식으로 간주할 수 있습니다.그렇긴 하지만 IsPrimitive 값은 false를 반환합니다.

Console.WriteLine("hello".GetType().IsPrimitive) // output = False

편집: 여기서 제 대답을 취소하고 싶습니다.이것은 엄밀히 말하면 원시적인 유형은 아니지만, 위에서 언급한 특성을 공유합니다.

c#에서 유형은 기본적으로 값 유형과 원시 유형의 두 가지 유형으로 정의됩니다.

먼저 C#에서 원시 유형의 정의를 확인합니다.

반면에 C#의 모든 원시 데이터 유형은 System 네임스페이스의 개체입니다.각 데이터 유형에 대해 짧은 이름 또는 별칭이 제공됩니다.예를 들어 int는 System의 짧은 이름입니다.Int32와 double은 System의 줄임말입니다.두 배.

이제 이 기사에서 차이점을 읽어 보십시오: 원시 유형 및 가치 유형

System.String 도지:"로:string이는 CLI의 기본 유형입니다.그러나 실제로는 힙 공간이 아닌 스택에 포함되는 유형이 값 유형입니다.

따라서 중요한 것은 가치 유형원시 유형입니다.마이크로소프트의 원시적인 정의에 따르면 원시적인 유형이지만 더 일반적인 의미에서는 그렇지 않습니다.

문자열은 참조 유형입니다.이를 확인하려면 문자열에서 F12를 수행합니다.

여기에 이미지 설명 입력

그들은 아닙니다, 왜냐하면 그들은 캐릭터의 순서이기 때문입니다.

언급URL : https://stackoverflow.com/questions/3965752/is-string-a-primitive-type