質問: in.read()) != -1) System.out.ptint(c + " "); in.close(); //例外処理は省略 ``` ### 実行結果(file.dat) 65 98 128 ### 詳しい質問内容 ###### 「writeメソッドに引数として渡せる値について」 参考にしているテキストでは ”引数にはint型またはbyte型の値を指定できる” とありました。 しかし例題ではchar型の値を引数として渡しています。 javaのAPIで調べてみると、自分の調べた限りでは引数はint型かbyte型で間違いないようです。 また、APIによると ”int型は使用できるが、上位24bitは無視される” とありました。残り8bitだとbyte型と同じ数字しか入れられない気がするのですが・・・。(もしかしてint型下位8bitだと、符号なしの整数値として扱われて255までの数字が入れられるようになるとか・・・?) **なぜchar型の変数をwriteメソッドの引数として渡せるのでしょうか。また、 byte型でなくint型を引数に指定するメリットは何でしょうか。** ###### 「この例題は実用的なのか」 ネットでバイナリファイルの書き出しについて調べていると、char型やint型ではなく”byte型”の変数を使っているソースコードの例が多い気がしました。 もし例題のコードが実際によく使う実用的な記述方法なら、考える価値アリだと思うのですが、そうでないならこの例題についてひたすら考えて時間を潰すよりも別のテキストやネットの情報から学ぶ方が効率的だと考えています。 **”例題”としてではなく”実際の使用例”として、上記のソースコードでのWriteメソッドの使い方(引数にchar型、int型指定)は覚えておいた方がよいのでしょうか。** 質問は以上です。長々とすみません。ご回答お待ちしております。
回答: char型の値をint型の変数に入れようとすると、**暗黙的キャスト**が起こります。 ``` char c = 'a'; int x = c; ``` これと同じで、int型の引数を要求するメソッドにchar型の値を渡した場合、int型に変換されるのです。