1

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?

Lion
  • 18,729
  • 22
  • 80
  • 110

3 Answers3

5

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.

Mike Samuel
  • 118,113
  • 30
  • 216
  • 245
  • so `String hello = new String("hello");` will create two "hello" string object in string pool or one? – Kowser Nov 09 '11 at 19:25
  • 2
    The `"hello"` creates one instance that is pooled, and the `new String(...)` creates a non-pooled instance. Try `System.out.println(("hello" == "hello") + "," + (new String("hello") == "hello") + "," + (new String("hello") == new String("hello")));` and you should see `true,false,false`. – Mike Samuel Nov 09 '11 at 19:47
2

Strings are immutable in Java, so when you do a println, a new String is created by the toUpperCase (and later garbage collected).

Igor
  • 33,276
  • 14
  • 79
  • 112
1

If I get what you want to know. The String object is represented by the double quotes ". This is called the String literal.

Felipe Cypriano
  • 2,727
  • 22
  • 32