package testPackage;

class Test {
    public static void main(String[] args) {
        String hello = "Hello", lo = "lo";
        String temp;

/* As explained in [JLS, 3.10.5], the following statements produce the output
   "true true true true false true". */

        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());

	/* The following assertions are all correct, but give rise to
           warnings due to incompleteness in ESJ/Java's semantics
           for strings. */

	//@ assert hello == "Hello";           // correct but fails
        //@ assert Other.hello == hello;       // correct but fails
        //@ assert other.Other.hello == hello; // correct but fails
        //@ assert hello == ("Hel"+"lo");      // correct but fails
        //@ assert hello != ("Hel"+lo);        // correct but fails
        temp = ("Hel"+lo).intern();
        //@ assert hello == temp;              // correct but fails

    }

}

class Other { static String hello = "Hello"; }

