看了lz之后特地去试了。发现很有趣的东西。lz写法其实有错,float的话数字后面要加f。
2看来是一个很特别的数字,你去试一下int其实同样的位置是iconst_2和bipush。int的话不是常量池没有,应该是没在那里显示,String也是一样的。
但是double的情况又是和float的一样。
2看来是一个很特别的数字,你去试一下int其实同样的位置是iconst_2和bipush。int的话不是常量池没有,应该是没在那里显示,String也是一样的。
但是double的情况又是和float的一样。
解决方案 »
- 求助,大神帮忙啊!
- 好囧,本来想让窗体标题显示窗体运行时间的,后来被我弄出死循环了
- class文件、机器码、机器语言,它们有关联吗?
- JAVA界面实在让我无语了
- struts中<bean:write>标签现实问题--从库中读出字符串中的<被替换成了“&It;”;
- 求一个比较优秀的多线程算法!
- 急求﹗﹗關於流讀取的問題。
- 在线等....关于打印,用JFrame做容器.会打印出标题栏来不,一般是用什么来做打印资料的容器的
- sybase + weblogic7
- prepareStatement的问题?
- LinkedList与ArrayDeque就操作堆栈而言的速度差异原因
- 关于java中的堆栈数据引用
看http://cs.au.dk/~mis/dOvs/jvmspec/ref-_ldc.html下面的Notes第一条
1. Where possible, its more efficient to use one of bipush, sipush, or one of the const instructions instead of ldc.
说的是bipush sipush和其他常量指令(比如你这里的fconst_2)比ldc效率更高,因为ldc需要从常量池里提取数据,所以速度慢,byte和short类型的常量一般都不会存到常量池去(也就是-32768 ~ 32767,所以你可能发现有些整数不在常量池里,但并不是所有int,你可以试试大一点的比如1234567),因为有bipush和sipush这两个效率更高的指令。至于float,0,1,2都是有对应的常量指令的,所以当然也不会到常量池去。
比如:
Java Virtual Machine Specification
深入理解Java虚拟机
另外StackOverflow上的很多答案也比较专业,虽然这网站比较烦。。