जैसा कि पहले यहां बताया गया है, String
उदाहरण अस्थिर हैं । StringBuffer
और StringBuilder
इस तरह के उद्देश्य के लिए परस्पर और उपयुक्त हैं कि क्या आपको धागा सुरक्षित होना चाहिए या नहीं।
हालांकि एक स्ट्रिंग को संशोधित करने का एक तरीका है, लेकिन मैं इसे कभी भी अनुशंसित नहीं करूंगा क्योंकि यह असुरक्षित, अविश्वसनीय है और इसे धोखा माना जा सकता है: आप स्ट्रिंग को समाहित करते हुए आंतरिक सरणी को संशोधित करने के लिए प्रतिबिंब का उपयोग कर सकते char
हैं। प्रतिबिंब आपको उन क्षेत्रों और विधियों तक पहुंचने की अनुमति देता है जो आम तौर पर वर्तमान दायरे (निजी तरीकों या किसी अन्य वर्ग से क्षेत्र ...) में छिपे होते हैं।
public static void main(String[] args) {
String text = "This is a test";
try {
//String.value is the array of char (char[])
//that contains the text of the String
Field valueField = String.class.getDeclaredField("value");
//String.value is a private variable so it must be set as accessible
//to read and/or to modify its value
valueField.setAccessible(true);
//now we get the array the String instance is actually using
char[] value = (char[])valueField.get(text);
//The 13rd character is the "s" of the word "Test"
value[12]='x';
//We display the string which should be "This is a text"
System.out.println(text);
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}