Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Consider:</p> <pre><code>String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); </code></pre> <p>Will print <code>false</code>.</p> <p>However</p> <pre><code>String s1 = "hi"; String s2 = "h1"; System.out.println(s1 == s2); </code></pre> <p>Will print <code>true</code>. </p> <p>And </p> <pre><code>String s1 = "hi"; String s2 = new String("hi"); System.out.println(s1 == s2); </code></pre> <p>Will print <code>false</code>.</p> <p>This is why you should always use <code>String.equals</code> when comparing <code>String</code>s instead of <code>==</code>.</p> <p>But don't take my word for it... Check this excerpt from the Java Language Specification <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5" rel="nofollow">JLS 3.10</a>:</p> <pre><code>Thus, the test program consisting of the compilation unit (§7.3): package testPackage; class Test { public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " "); System.out.print((Other.hello == hello) + " "); System.out.print((other.Other.hello == hello) + " "); System.out.print((hello == ("Hel"+"lo")) + " "); System.out.print((hello == ("Hel"+lo)) + " "); System.out.println(hello == ("Hel"+lo).intern()); } } class Other { static String hello = "Hello"; } and the compilation unit: package other; public class Other { static String hello = "Hello"; } produces the output: true true true true false true This example illustrates six points: Literal strings within the same class (§8) in the same package (§7) represent references to the same String object (§4.3.1). Literal strings within different classes in the same package represent references to the same String object. Literal strings within different classes in different packages likewise represent references to the same String object. Strings computed by constant expressions (§15.28) are computed at compile time and then treated as if they were literals. Strings computed by concatenation at run time are newly created and therefore distinct. The result of explicitly interning a computed string is the same string as any pre-existing literal string with the same contents. </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload