コンパイル後の hoge.class は共通に使える。Windows環境でコンパイルしたものとLinux上でコンパイルしたものを混在させての動作もプログラム自体には問題ない。
ただしコンパイルしたjava(javacのこと)のバージョンと,実行する環境のjavaのバージョンが異なると動かないことはある。
ソースファイル( hoge.java など .java ファイル)の中に日本語の文字が含まれなければどちらの環境でコンパイルしても問題ない。
ただし,日本語の文字が含まれている java のソースをコンパイルする時には日本語の文字コードの種類(エンコーディング方法)が問題になる。javaコンパイラは自分の置かれたOSが使う文字コードで書かれていると仮定してコンパイルするからである。(日本語がコメントだけでも同様)
ひとつのOSの上で文字コードの環境を変更せずにコンパイルするなら、文字コードを意識する必要はない。
プログラム(*.java)の中に日本語がある場合は次のうちいずれかを行う。
読み込むデータについては、また別に対応が必要になる.
特に文字コードを考慮せずにプログラムした場合は,Shift_JIS環境で実行するとShift_JISを仮定し、UTF-8環境ではUTF-8を仮定してファイルを読むようになる。これはこれで便利なのだが,Shift_JIS環境で書いたデータをUTF-8環境へ持ってきてそのまま使うわけには行かない。文字コード変換などをしてデータも合わせて用意する必要がある。
文字コードを決めてどちらの環境でも同一の文字コードで読むように設計することも可能である。
ファイルを読み込んでからプログラムの中で文字コードを判別するのは難しくどうしても誤判定が残る。
Windows環境でUTF-8環境(学校)で作られたソースをコンパイルする場合
$ javac -encoding UTF-8 Hello.java
UTF-8環境(学校)でWindows環境で作られたソースをコンパイルする場合
$ javac -encoding Shift_JIS Hello.java
Shift_JIS
,SJIS
:シフトJIS(JDK 1.2~JDK 1.4.0では Shift_JIS
は SJIS
ではなく MS932
の別名)Windows-31J
,MS932
:シフトJISにWindows拡張文字を含ませたものISO-2022-JP
,ISO2022JP
:いわゆるJISEUC-JP
,EUC_JP
:日本語EUCUTF-8
,UTF8
:Unicodeの符号化の一種