स्ट्रिंग अक्षर स्वयं ही जावा की तरह अपरिवर्तनीय है।
स्ट्रिंग अक्षर स्मृति के केवल पढ़ने के हिस्से में संग्रहीत हैं।
उदाहरण के लिए, यदि आप निम्नलिखित की तरह कुछ करते हैं, आप एक segfault मिल जाएगा:
char *ptr = (char *) "hello";
ptr[0] = 'a'; //segfault! you can't change something that's immutable
हालांकि! तुम्हें पता है, स्ट्रिंग s[2] = 'a'
का उपयोग कर संशोधित जब तक स्ट्रिंग स्थिरांक कीवर्ड के साथ घोषित किया जाता है सकते हैं,
इस का कारण यह है कि तार के लिए =
ऑपरेटर ओवरलोड हो गया है एक तर्क के रूप स्ट्रिंग शाब्दिक ले जाता है, और फिर स्ट्रिंग के माध्यम से लूप शाब्दिक प्रत्येक चरित्र को एक परिवर्तनीय चार सरणी में कॉपी करना।
तो यदि आप जावा और सी में स्ट्रिंग अक्षर की तुलना कर रहे हैं, तो अपरिवर्तनीय होने पर उनका वही व्यवहार होता है। जब म्यूटेबल होने की बात आती है तो जावा और सी में स्ट्रिंग ऑब्जेक्ट्स का भी वही व्यवहार होता है।
यहाँ एक उदाहरण तथ्य स्ट्रिंग एक प्रति है कि प्रदर्शित है: सी ++ परिवर्तनशील हैं
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char *ptr = "hello";
string s = ptr;
s[0] = 'b';
cout << s << endl; //prints bello
cout << ptr << endl; //prints hello
return 0;
}
हां, 'std :: string's mutable हैं। स्ट्रिंग अक्षर, हालांकि, नहीं हैं। –
यह सबसे अधिक संभावना है एक सी ++ स्ट्रिंग। लेकिन आपको स्पष्ट करना चाहिए कि आपका क्या मतलब है। – juanchopanza
नोट: 'char * s =" content "को C++ में बहिष्कृत किया गया है, यह अपरिवर्तनीय' const char * s = "content" होना चाहिए। अपने उदाहरण में स्ट्रिंग मानना एक std :: स्ट्रिंग है, हाँ std :: स्ट्रिंग और वर्णों की एक सरणी [] = "सामग्री" (जो उपरोक्त चार */const char * से अलग है) उत्परिवर्तनीय है। –