作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Java 字节码。我想知道我是否正确理解了这个字节码过程
我还没有完成,但这只是好路的开始..
00000000 aload_0
// load param1 (String)
// Stack is [StringParam]
00000001 invokevirtual char[] java.lang.String.toCharArray()
// split variable in an array of char
// Stack is [ReferenceToCharArray] ?
00000004 dup
// duplicate the top of operand stack and put it back at the end
// Stack is now [ReferenceToCharArray ReferenceToCharArray]
00000005 arraylength
// Return array's length
// Stack is now [ReferenceToCharArray ArrayLength]
00000006 iconst_2
// push 2 in stack
// Stack is now [ReferenceToCharArray ArrayLength 2]
00000007 if_icmpge pos.00000013
// If the Array length is greater or equals to 2
// Stack is now [ReferenceToCharArray]
00000013 areturn
// Return the array
// Stack is empty
最佳答案
调用虚拟后,您的堆栈错误,param1 不再位于堆栈顶部。而且我不认为 3 会被放入堆栈中。
if_icmpge 真正做的是将 invokevirtual 返回的 char 数组的长度与 2 进行比较
关于java - 字节码指令 : Do I understand well,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541762/
我是一名优秀的程序员,十分优秀!