System.out.println("a == helloworld:" + (a == ("hello" + "world")));//true
编译的时候就已经变成System.out.println("a == helloworld:" + (a == ("helloworld")));//true
编译器会优化,把可以进行的运算先运算好了,比如上面的字符串合并就在编译时就完成了
而由于a和"helloworld"在编译时拥有同样的值,所以肯定是引用同一常量池中的对象,所以==会返回true,
而下面的字符串合并时在运行时进行的,所以会创建新对象,所以==返回false
编译的时候就已经变成System.out.println("a == helloworld:" + (a == ("helloworld")));//true
编译器会优化,把可以进行的运算先运算好了,比如上面的字符串合并就在编译时就完成了
而由于a和"helloworld"在编译时拥有同样的值,所以肯定是引用同一常量池中的对象,所以==会返回true,
而下面的字符串合并时在运行时进行的,所以会创建新对象,所以==返回false
x + y 运算时,产生新对象,运算结果不再是a 指向的helloworld
学java是往深了学,还是往宽了学?没有孰优孰劣,反而很多时候是相互互补的关系.
有些问题,最好不要去想,也不要去问,问了反而会影响自己的学习,以上纯属瞎编,