ruby - 为什么 to_java 方法将 Java 中的整数(可能是)转换为 Long?

标签 ruby interop jruby rubymine

为什么to_java方法将1的整数值转换为Java::JavaLang::Long类,而不是Integer类?

下面是这个方法的一个例子:

puts 1.to_java.class

在普通 Java 中,值 1,如果放在包装类中,将是 Java.lang.Integer 的成员(如果我错了请纠正我)。为什么在 Ruby 中,1.to_java 是 Java::JavaLang::Long 的成员?

最佳答案

只是因为 JRuby 中的 Fixnum 在内部表示为(原始)长字段(检查 RubyFixnum.java),因此默认情况下 Fixnum#to_java 只是返回它的内部 Java 值

同样适用于 Bigint - 在内部表示为 BigInteger,因此您可以使用 to_java

...您可以提供转换提示:1.to_java(:int).class # Java::JavaLang::Integer

关于ruby - 为什么 to_java 方法将 Java 中的整数(可能是)转换为 Long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142137/

相关文章:

ruby-on-rails - 我可以在 gem 中仅从文件中获取一次数据吗?类似于 Rails 中的配置/初始化器?

c# - 如何将托管结构放入 C++/native 中

ssl - 在 JRuby 中运行并支持 SSL 和流式传输的 Rack 支持网络服务器

java - 在 jruby on Rails 中哪里设置 java 选项?

ruby - Dashing 不能在 Heroku 上运行

ruby-on-rails - 以不同方式格式化索引项

ruby - 如何使用 Ruby 在 Hadoop HDFS 中写入和读取文件?

c# - 在 NET Core 中调用从 C++ 项目构建的 .dll 时出现 BadImageFormatException

ios - didBeginContact 传递给 PKPhyicsObject

ruby - 缓慢的 Ruby DataMapper.setup