A String is represented as objects in Java. Accordingly, an object contains values stored in instance variables within the object. An object also contains bodies of code that operate upon the object. These bodies of code are called methods.
Objects that contain the same types of values and the same methods are grouped together into classes. A class may be viewed as a type definition for those objects. Accordingly, how is a String in Java represented? Let's consider the following code snippet in Java.
final public class Main
{
public static void main(String[] args)
{
String s="black lion";
String s1=new String(s);
System.out.println(s.toUpperCase());
System.out.println("black lion".toUpperCase());
System.out.println(s1.toUpperCase());
}
}
The above code displays the String after converting it into uppercase. In this statement String s="black lion"; , Where is the String being assigned. Is it being assigned into an instance variable within the String class or somewhere? and in this statement "black lion".toUpperCase();. Is it an object of the String class? How?
解决方案
A string is a char[] containing a series of UTF-16 code units, an int offset into that array, and an int length.
I think the source of your confusion is the idea that
String s
creates a string that is assigned into.
It does not. It creates space for a string reference. Assigning copies references around but does not modify the objects to which those references refer.
You should also be aware that
new String(s)
doesn't really do anything useful. It merely creates another instance backed by the same array, offset, and length as s. There is very rarely a reason to do this so it is considered bad practice by most Java programmers.
Java double quoted strings like "my string" are really references to interned String instances so "foo" is a reference to the same String instance regardless of how many times it appears in your code.