Sometime back I was asked how to copy a String in java. As we know that String is an immutable object, so we can just assign one string to another for copying it. If the original string value will change, it will not change the value of new String because of immutability.
Here is a short java String copy program to show this behavior.
package com.journaldev.string;
public class JavaStringCopy {
public static void main(String args[]) {
String str = "abc";
String strCopy = str;
str = "def";
System.out.println(strCopy); // prints "abc"
}
}
Note that we can perform direct assignment of one variable to another for any immutable object. It’s not limited to just String objects. However, if you want to copy a mutable object to another variable, you should perform deep copy.
There are few functions too that can be used to copy string. However it’s not practical to use them when you can safely copy string using assignment operator.
Using String.valueOf()
method
String strCopy = String.valueOf(str);
String strCopy1 = String.valueOf(str.toCharArray(), 0, str.length()); //overkill*2
Using String.copyValueOf()
method, a total overkill but you can do it.
String strCopy = String.copyValueOf(str.toCharArray());
String strCopy1 = String.copyValueOf(str.toCharArray(), 0, str.length()); //overkill*2
If you want to copy part of string to another string, then valueOf
and copyValueOf
methods are useful.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.
At least in Java 11 (I believe this has been true for a lot longer than that), `String.valueOf(str)` will return the same instance of `str`, so it’s functionally identical to directly assigning the reference. In String.java: public String toString() { return this; } public static String valueOf(Object obj) { return (obj == null ? “null” : obj.toString(); } When obj is a String, String.toString() is called, and this returns the string itself and not a copy. If you want a full copy of the original string, you’ll need to use the String constructor or any of the other methods you listed.
- Kiefer