java一个final关键字的问题

这段代码为什么输出结果是那样的,难道java不是一步步往下执行吗?

 public class Test {
    public static void main(String[] args)  {
        String a = "hello2"; 
        final String b = "hello";
        String d = "hello";
        String c = b + 2; 
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}
true
false

http://bbs.csdn.net/topics/391070616

http://cache.baiducontent.com/c?m=9d78d513d9971af30bb3837e7c5791264208d5743da7c7637ec3e54a84652b563611f4cd50351174879e20345fb8482cfd803165460537b6ebdff94fcacf983f5f8b30407208c1014cdc43e98d0432c0538d47b9ff58f0ba8763d2f88ec4df230f9d15183cddb2d00b4109cb64f31634e1a29a4c&p=9c64c54ad6c041f90be2962b4c0e9e&newp=8b2a9715d9c342af04ab853d7f548b231610db2151d4db10&user=baidu&fm=sc&query=final+string%D3%D0%CE%DEfinal%B5%C4%C7%F8%B1%F0&qid=f690ec9200105cb2&p1=1

跟你的问题一模一样