- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚通读了 Java bytecode instruction listings并想知道:
Java字节码中的ifne
和ifnonnull
有什么区别?
我知道在高级语言(例如 Java)中,值 0
是一个具有某些运算(如加法、减法、乘法)并且可以与其他数值进行比较的数值,而null
是代表“无值”的值。
我想我遇到的一个问题是我不知道如何在字节码/程序集中表示 null
。
最佳答案
JVM 规范在这方面可能更清楚。
因此 ifne
(and ifeq
etc)限制是:
An
ifeq
instruction is type safe iff one can validly pop a type matching int off the incoming operand stack yielding the outgoing type state NextStackFrame, and the operand of the instruction, Target, is a valid branch target assuming an incoming type state of NextStackFrame.
鉴于 ifnonnull
限制是:
An ifnonnull instruction is type safe iff one can validly pop a type matching reference off the incoming operand stack yielding the outgoing type state NextStackFrame, and the operand of the instruction, Target, is a valid branch target assuming an incoming type state of NextStackFrame.
基本上 ifeq
和 ifne
用于整数值,而 ifnonnull
用于引用值。
要比较两个引用是否相等,您可以使用 if_acmpeq
反而。 ifnonnull
实际上是只有 一个 操作数的特殊情况,因为它总是只与 null 进行比较。
关于null
引用如何在data 中表示,JVM 规范explicitly allows this to be implementation-specific :
A reference value may also be the special null reference, a reference to no object, which will be denoted here by null. The null reference initially has no run-time type, but may be cast to any type. The default value of a reference type is null.
The Java Virtual Machine specification does not mandate a concrete value encoding null.
关于java - ifne 和 ifnonnull 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22731293/
我在这里遇到了可怕的 * 无法使用简单的数学函数将其转换为 IFn 错误: (defn calc [sc1 m1 alpha beta gamma ta1 tb1 min_m1 min_tca tca
map 似乎两者兼而有之 ({:a 1} :a) (因为它是一个 IFn)和 (:a {:a 1}) 因为它是一个 ILookup。此外,RT/getFrom 允许以类似的方式通过索引查找字符串和数组
假设我有一个“类似函数”的记录,至少在它代表可以应用于某些参数的操作的意义上。 我可以通过实现 clojure.lang.IFn 使其作为函数工作,例如: (defrecord Func [f x]
对于 Ludum Dare 36,我决定在 coljure 中尝试基于文本的冒险游戏。它有效,但我收到一个非 fatal error : Exception in thread "main" java
我看过 David Nolen 关于 ClojureScript 的演讲,他在演讲中将 IFn 扩展到 Regexp,这样我们就可以将正则表达式文字作为字符串上的函数来调用以检查匹配。 我在常规 Cl
我刚刚通读了 Java bytecode instruction listings并想知道: Java字节码中的ifne和ifnonnull有什么区别? 我知道在高级语言(例如 Java)中,值 0
在 Clojure 的 Java 源代码中,我看到: import clojure.lang.RT; import clojure.lang.IFn; RT 似乎代表“运行时”(虽然答案中没有给出官方
[TL;DR:以下 JVM 字节码指令似乎不起作用: iconst_0 istore 6 ...sequential iinc 6 1 jsr L42 ... ; L42 iload 6 ifeq L
我希望能够在正则表达式上调用 map,如下所示: (map #"ab+c*" ["abbb" "ac" "abbcc"]) => ("abbb" "abbcc") 如何扩展正则表达式以支持 IFn 接
我无法理解 IFn 和 fn 之间的区别。 你能举个例子吗? 请提供这些函数之间的差异: (fn? x) (ifn? x) 他们的行为是一样的。 最佳答案 Clojure 文档非常清楚地描述了差异:
我是 Riemann 和 Clojure 的新手。我想要做的就是在某些服务的 TTL 到期时向三个电子邮件组发送电子邮件通知。 我创建了某种配置文件,用于存储电子邮件列表: { :email_gr
我只是想设置名为 test 的 cookie 的值。 example: http://www.luminusweb.net/docs/sessions_cookies.md 我的代码: (GE
我有一个函数,它需要年数和薪水,然后递归地将薪水加倍,直到年数用完。但是,我不断收到此错误: ClassCastException java.lang.Long cannot be cast to c
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有一些处理列表的函数。我有一个偶数函数,它接受一个列表参数并获取列表的偶数索引。奇函数做同样的事情,但使用奇数索引。我还有另一个函数,它合并两个排序列表,称为 merge-list,它将两个列表作为
我只是想用 Clojure 写一个简单的小猜谜游戏,我得到了这个错误。我看不到我的 Character 在哪里被视为函数,因为结果输入也预测不应该存在这样的问题。这是代码: (ns clojure.e
这个问题在这里已经有了答案: ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn (4 个答案) 关闭 6 年前
我试图将从映射操作返回的(惰性)序列传递给另一个映射操作,以便我可以在第一个序列中查找元素。代码从文本文件(以行/列格式)解析一些足球装置,清理它,然后返回一张 map 。 这是代码: (ns fix
各位,我有以下函数,但运行时出现 java.lang.ClassCastException: java.lang.Boolean 无法转换为 clojure.lang.IFn"错误。关于如何修复它有什
所以,在我的 core.clj 文件中,我有: (def page-buffer (BufferedReader. (InputStreamReader. (clojure.java.io/input
我是一名优秀的程序员,十分优秀!