2014-10-01 52 views
2

爲什麼to_java方法將整數值1轉換爲Java :: JavaLang :: Long類,而不是整數calss?爲什麼to_java方法將Java中的整數(會是什麼)轉換爲Long?

下面是該方法中的動作的一例:

puts 1.to_java.class 

在常規Java中,值1,如果放置在一個包裝類,將java.lang.Integer中(如果指正的memeber我錯了)。爲什麼在Ruby中,1.to_java是Java :: JavaLang :: Long的成員?

+0

轉換似乎是基於對象的類('Fixnum'),而不是對象本身。 – Stefan 2014-10-01 13:29:15

+0

在這種情況下,爲什麼類FixNum中的所有對象在轉換爲Java時不是Java :: JavaLang :: Integer的成員 – FluffyKittens 2014-10-01 13:54:51

+0

這似乎是某種自動升級,因爲Java中的所有整數也可以是Long。但我會感謝有人提供更精確的答案。 – FluffyKittens 2014-10-01 13:56:10

回答

0

只是因爲Fixnum JRuby中在內部表示爲(原始)長場(檢查RubyFixnum.java),因此在默認情況下Fixnum#to_java簡單地返回它的內部Java值

同樣爲Bigint - 內部表示爲BigInteger的,所以你使用to_java

得到一個...你可以提供一個轉換提示:1.to_java(:int).class # Java::JavaLang::Integer

相關問題