(このエントリは classファイルを触ってはいけない - 日々常々 のパクリスペクトエントリです)
まずこういうクラスがあります。
// Hoge.java public class Hoge { // static にすればインスタンスを生成する必要はない public static void print(int value) { System.out.println("int: " + value); } }
そして、このクラスを使うクラスがあります。
// Fuga.java public class Fuga { public static void main(String[] args) { short value = 1; Hoge.print(value); } }
そのままコンパイルします。
Aebi:temp ebi$ ls Fuga.java Hoge.java Aebi:temp ebi$ javac * Aebi:temp ebi$ ls Fuga.class Fuga.java Hoge.class Hoge.java
実行します。
Aebi:temp ebi$ java Fuga
int: 1
// Hoge.java public class Hoge { // static にすればインスタンスを生成する必要はない public static void print(int value) { System.out.println("int: " + value); } // static を知らない人は毎回インスタンスを生成しているが… public static void print(short value) { System.out.println("short: " + value); } }
Aebi:temp ebi$ javac Hoge.java
そんで実行。
Aebi:temp ebi$ java Fuga
int: 1
知ってれば予想通りですかね。知らなければなんぞこれになるかもしれません。
この問題 (Java としてはごく当たり前の動きなのですが) で「変更が全然反映されない…」と悩む人がたまーにいるとかいないとか。
気になった方は id:irof さんの classファイルを触ってはいけない - 日々常々 を一読されることをおすすめします *1
*2