文档章节

编译器做的那些坏事

落叶伴长风
 落叶伴长风
发布于 2016/01/29 11:02
字数 425
阅读 9
收藏 0

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

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
作品 0
南昌
程序员
在.NET平台上使用Scala语言(下):分析

上一篇文章里我们简单尝试了在Scala里编写.NET应用程序。这个过程并不困难,因为似乎Scala官方已经对此已经有较好的支持了。我们要做的只是“获取工具”,“编译成IL”,最后再“生成程序集”...

mj4738
2011/11/01
0
0
每个时代都是一样的 ——《明朝那些事儿》读后感

难得自己看历史类的书籍看得如此的入迷,这都得益于作者幽默的文笔风格。 太过幽默有趣的东西,容易被人认为是不严肃的,咱们暂不讨论这本书的严谨性,于我而言,我把它当做一次知识的扫盲,...

Sunxb
08/20
0
0
一些编程上的策略

这里将向大家分享的是一些我对编程的思考总结,这些经验在我毕生编程生涯中曾帮助我在无数的事情上作出正确的决定。这些编程策略有些是很显然的,但实际编程中往往被人们忽略。 下面的例子是...

oschina
2013/07/02
3.9K
12
为什么我不推荐 JavsScript 为首选编程语言

对于软件职业生涯,JavsScript不应该是首选 几天前,我写了一篇《what programming language you should learn first for a career in programming》的文章,引来了很多的争论(Google+ 上有...

腊八粥
2014/01/11
4.8K
25
从 Larry Page 的语录一窥他经营 Google 的理念

Larry Page 是目前全世界最伟大的公司之一 Google 的掌门人。Google 创立后的很长一段时间里,Page 和公司的另一位联合创始人 Sergey Brin 共同管理着公司。2001 年,Eric Schmidt 开始接管公...

oschina
2012/12/09
2.8K
9

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部