文档章节

编译器做的那些坏事

落叶伴长风
 落叶伴长风
发布于 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
程序员开发去马赛克工具,效果感人

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/P5dEyT322JACS/article/details/83755188 (给程序员的那些事加星标) 给小视频女主角换脸的 deepfakes 2017...

程序员的那些事_
11/05
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.9K
25

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 有一天考拉麻麻拉肚子了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享周汇洋的单曲《Man Srae(曼斯拉之舞)》:美滋滋。。。。 手机党少年们想听歌,请使劲儿戳(这里) 我听了一下 赶紧关了, ...

小小编辑
今天
68
5
oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
7
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
6
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
18
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部