编译器做的那些坏事
编译器做的那些坏事
落叶伴长风 发表于2年前
编译器做的那些坏事
  • 发表于 2年前
  • 阅读 5
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 我们要知道其实很多情况下不是我们学东西产慢,而是老外喜欢玩,做了很多优化, 然后这么多东西吧,我们学的又急没办法,只好跟着他们走了!

首先 我们要有一份可执行代码必须是这样子来

public static String getA(){return "a";}

public static void main(String[] args) {


	String  a = "a";
	final String c = "a";

	String b = a + "b"; 
	String d = c + "b"; 
	String e = getA() + "b";
	
	String compare = "ab";

	System.out.println(b == compare);
	System.out.println(d == compare);
	System.out.println(e == compare);		
	
}

结果显示是这样子的

false  
true
false

按照常理来讲 b d  e  都应该是"ab"啊, 统统应该相等

很可惜 == 在对象里面是比对象的地址,也就是引用的本身存储的值,诶这样也不对啊, b、d、e三个的地址不应该是一样的吗?

其实我个人也觉得一样,但是外国人非得优化, 代码分为两个阶段编译阶段和运行阶段

String b = a + "b";  这段代码外国人认为优化不了为啥, 因为 a可以变啊,
String d = c + "b";  这段代码外国人认为可以优化 因为c 被final 修饰了,所以d永远变不了 所以 d = "ab"了
String e = getA() + "b"; 那这个getA()呢,其实我觉得吧,非常量的一切东西都是可变的,与难以预测的,谁知道
getA里面是什么东西呢, 有又没有借助变量

 所以就在编译阶段做出了优化, 只有d 指向了常量区,b、e都新开了空间!


总结:编译器总是做一些优化,而我们则需要注意这些优化的细节!


共有 人打赏支持
粉丝 0
博文 61
码字总数 7974
×
落叶伴长风
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: