<HTML><style type="text/css">  ul.inheritance {
      margin:0;
      padding:0;
  }
  ul.inheritance li {
       display:inline;
       list-style:none;
  }
  ul.inheritance li ul.inheritance {
    margin-left:15px;
    padding-left:15px;
    padding-top:1px;
  }
</style><!-- ======== START OF CLASS DATA ======== -->
<H2>
    <FONT SIZE="-1">
        java.lang</FONT>
    <BR>
    Class String</H2>
<PRE>
<A HREF="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</A>
  <IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>java.lang.String</B>
</PRE>
<DL><DL>
    <DT><BR><PRE>public final class <B>String</B><DT><BR>extends <A HREF="../../java/lang/Object.html" title="class in java.lang">Object</A><DT><BR>implements <A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A></DL>
</PRE>

    <DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../java/io/Serializable.html" title="interface in java.io">Serializable</A>, <A HREF="../../java/lang/CharSequence.html" title="interface in java.lang">CharSequence</A>, <A HREF="../../java/lang/Comparable.html" title="interface in java.lang">Comparable</A>&lt;<A HREF="../../java/lang/String.html" title="class in java.lang">String</A>&gt;</DD>
</DL>
<P>    The <code>String</code> class represents character strings. All
    string literals in Java programs, such as <code>"abc"</code>, are
    implemented as instances of this class.
<p>
    Strings are constant; their values cannot be changed after they
    are created. String buffers support mutable strings.
    Because String objects are immutable they can be shared. For example:
<p><blockquote><pre>
     String str = "abc";
 </pre></blockquote><p>
    is equivalent to:
<p><blockquote><pre>
     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
 </pre></blockquote><p>
    Here are some more examples of how strings can be used:
<p><blockquote><pre>
     System.out.println("abc");
     String cde = "cde";
     System.out.println("abc" + cde);
     String c = "abc".substring(2,3);
     String d = cde.substring(1, 2);
 </pre></blockquote>
<p>
    The class <code>String</code> includes methods for examining
    individual characters of the sequence, for comparing strings, for
    searching strings, for extracting substrings, and for creating a
    copy of a string with all characters translated to uppercase or to
    lowercase. Case mapping is based on the Unicode Standard version
    specified by the <A HREF="../../java/lang/Character.html" title="class in java.lang"><CODE>Character</CODE></A> class.
<p>
    The Java language provides special support for the string
    concatenation operator (&nbsp;+&nbsp;), and for conversion of
    other objects to strings. String concatenation is implemented
    through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
    class and its <code>append</code> method.
    String conversions are implemented through the method
    <code>toString</code>, defined by <code>Object</code> and
    inherited by all classes in Java. For additional information on
    string concatenation and conversion, see Gosling, Joy, and Steele,
    <i>The Java Language Specification</i>.

<p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
    or method in this class will cause a <A HREF="../../java/lang/NullPointerException.html" title="class in java.lang"><CODE>NullPointerException</CODE></A> to be
    thrown.

<p>A <code>String</code> represents a string in the UTF-16 format
    in which <em>supplementary characters</em> are represented by <em>surrogate
        pairs</em> (see the section <a href="Character.html#unicode">Unicode
        Character Representations</a> in the <code>Character</code> class for
    more information).
    Index values refer to <code>char</code> code units, so a supplementary
    character uses two positions in a <code>String</code>.
<p>The <code>String</code> class provides methods for dealing with
    Unicode code points (i.e., characters), in addition to those for
    dealing with Unicode code units (i.e., <code>char</code> values).
<P>

<P>
<DL>
    <DT><B>Since:</B></DT>
    <DD>JDK1.0</DD>
    <DT><B>See Also:</B><DD><A HREF="../../java/lang/Object.html#toString()"><CODE>Object.toString()</CODE></A>,
    <A HREF="../../java/lang/StringBuffer.html" title="class in java.lang"><CODE>StringBuffer</CODE></A>,
    <A HREF="../../java/lang/StringBuilder.html" title="class in java.lang"><CODE>StringBuilder</CODE></A>,
    <A HREF="../../java/nio/charset/Charset.html" title="class in java.nio.charset"><CODE>Charset</CODE></A>,
    <A HREF="../../serialized-form.html#java.lang.String">Serialized Form</A></DL>

<P>
</HTML>