// ----------------
// StackVsHeap.java
// ----------------

final class StackVsHeapTest {
    private static int f (int n) {
        if (n == 0)
            return 0;
        return 1 + f(n - 1);}

    public static void main (String[] args) {
        System.out.println("StackVsHeap.java");

        {
        final String x = "abc";
        final String y = "abc";
        assert x == y;
        assert x.equals(y);
        }

        {
        final String x = new String("abc");
        final String y = new String("abc");
        assert x != y;
        assert x.equals(y);
        }

        {
        final String x = "abc";
              String y = x;
        assert x == y;
        y += "defgh";
        assert x != y;
        assert x.equals("abc");
        assert y.equals("abcdefgh");
        }

        {
        final StringBuilder x = new StringBuilder("abc");
        final StringBuilder y = new StringBuilder("abc");
        assert x != y;
        assert !x.equals(y);
        assert x.toString().equals(y.toString());
        }

        {
        final StringBuilder x = new StringBuilder("abc");
        final StringBuilder y = x;
        assert x == y;
        y.append("defgh");
        assert x == y;
        }

        try {
            final int n = 125000;
            assert f(n) == n;}
        catch (StackOverflowError e) {
            assert false;}

        try {
            final int n = 135000;
            assert f(n) == n;
            assert false;}
        catch (StackOverflowError e) {
            assert e.toString().equals("java.lang.StackOverflowError");}

        try {
            final int[] a = new int[11500000];}
        catch (OutOfMemoryError e) {
            assert false;}

        try {
            final int[] a = new int[12000000];
            assert false;}
        catch (OutOfMemoryError e) {
            assert e.toString().equals("java.lang.OutOfMemoryError: Java heap space");}

        System.out.println("Done.");}}


syntax highlighted by Code2HTML, v. 0.9.1