2013-08-04 54 views

回答

1

可能只是因爲該類型的符號稍微短了點。

+0

你會這樣想,但如果我將「char」改爲「short」,它的尺寸也會縮小。 – user1522860

+1

@ user1522860 - 出於同樣的原因。如果您確實需要/需要理解,您將需要手動解碼類文件...使用JVM規範中指定的類文件格式。但是,答案是沒有意義的...所以不要指望人們浪費時間爲你做。 –

4

它可能是因爲編譯器生成一個短几個字符的符號。就像在.java文件中,第一行將創建一個更大的文件,因爲它有更多的字符。

如果你在vim中打開.class,你將會看到下面的int數組。

Êþº¾^@^@^@2^@^O 
^@^C^@^L^G^@^M^G^@^N^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@ 
SourceFile^A^@!JFileChooserDisableDirectory.java^L^@^D^@^E^A^@^\JFileChooserDisableDirectory^A^@^Pjava/lang/Object^@!^@^B^@^C^@^@^@^@^@^B^@^A^@^D^@^E^@^A^@^F^@^@^@^]^@^A^@^A^@^@^@^E*·^@^A±^@^@^@^A^@^G^@^@^@^F^@^A^@^@^@^A^@ ^@^H^@ ^@^A^@^F^@^@^@"^@^A^@^B^@^@^@^F^P 
¼ 
L±^@^@^@^A^@^G^@^@^@ 
^@^B^@^@^@^D^@^E^@^E^@^A^@ 
^@^@^@^B^@^K 

這裏是char陣列.class文件。

Êþº¾^@^@^@2^@^O 
^@^C^@^L^G^@^M^G^@^N^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@ 
SourceFile^A^@!JFileChooserDisableDirectory.java^L^@^D^@^E^A^@^\JFileChooserDisableDirectory^A^@^Pjava/lang/Object^@!^@^B^@^C^@^@^@^@^@^B^@^A^@^D^@^E^@^A^@^F^@^@^@^]^@^A^@^A^@^@^@^E*·^@^A±^@^@^@^A^@^G^@^@^@^F^@^A^@^@^@^A^@ ^@^H^@ ^@^A^@^F^@^@^@"^@^A^@^B^@^@^@^F^P 
¼^EL±^@^@^@^A^@^G^@^@^@ 
^@^B^@^@^@^D^@^E^@^E^@^A^@ 
^@^@^@^B^@^K 

使用TextDiff你可以看到在代碼中的差異。

+0

有趣!爲了內存保護的目的,它仍然值得使用char數組而不是int數組嗎?直覺會說是,但我不確定了。 – user1522860

+0

如果你想節省內存,你可能需要一個'short []'或'byte []'。 Java字符是2字節無符號整數,這可能不是你想要的。 – user2357112

+0

它不會有明顯的區別。即使你有一百萬個陣列,它仍然只有一個MB左右。 – 2013-08-04 06:02:01

相關問題