// String_Demo.cpp: Hauptprojektdatei.

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
   // Unicode und String-Literale
   System::Windows::Forms::MessageBox::Show("Willkommen in Sm\u00E5land");


   // Strings erzeugen
   {
      // Implizite Erzeugung eines String-Objekts
      String^ str1 = "String 1";

      // Exlizite Erzeugung eines String-Objekts
      String^ str2 = gcnew String("String 2");


      String^ str3 = gcnew String('*', 12);
      Console::WriteLine(str3);

      String^ str4 = gcnew String(str1->ToCharArray(), 2, 4);
      Console::WriteLine(str4);
   }

   // Unveränderlichkeit
   {
      String^ str1 = "String 1";
      String^ str2 = "String 2";

      str1->Insert(2, "rrrr");
      str2 = str1->Insert(2, "rrrr");

      Console::WriteLine(str1);
      Console::WriteLine(str2);
   }

   // Pooling
   {
   String^ s1 = "Hallo";
   String^ s2 = "Hallo";
   String^ s3 = "Hallo nochmal";


   if (String::IsInterned(s1) == nullptr)
      Console::WriteLine("kein Pooling für s1");
   else
      Console::WriteLine("Pooling für s1");

   if (String::IsInterned(s2) == nullptr)
      Console::WriteLine("kein Pooling für s2");
   else
      Console::WriteLine("Pooling für s2");

   if (String::IsInterned(s3) == nullptr)
      Console::WriteLine("kein Pooling für s3");
   else
      Console::WriteLine("Pooling für s3");


   if (String::IsInterned(s1) == String::IsInterned(s2))
   {
      Console::WriteLine("Identischer String für s1 und s2");
   }
   if (String::IsInterned(s1) == String::IsInterned(s3))
   {
      Console::WriteLine("Identischer String für s1 und s3");
   }
   }

   Console::ReadLine();
   return 0;
}
