プロが教えるわが家の防犯対策術!

Javaのストリームを勉強している際に、下記のサンプルソースを見ました。
(ユーザが入力した内容を、1文字ずつそのまま画面に返すプログラムです。)

疑問点があるので教えて下さい。

=====

import java.io.*;
 public class Sample{
  public static void main(String args[]){
  int b;
  try{
   while((b = System.in.read()) != -1){
   System.out.print((char)b);
以下省略

======

■疑問箇所1.
while((b = System.in.read()) != -1)
とありますが、
(1)ユーザが入力した文字(整数ではない)が、何故、int型の変数に代入出来るのでしょうか?
(2)read()メソッドはint型の戻り値を持つようですが、EOFの"-1"以外の時は、
 どんな数値が返されているのでしょうか?
 (read()メソッドは、1文字読み込んで、戻り値でその文字をUnicodeにエンコードした値を返しているとか?)

■疑問箇所2.
System.out.print((char)b);
とありますが、変数bには数値が入っていると考えられます。
これは、変数bの整数が、(char)でキャストされる事によって、
再び、文字に「変換」されているのでしょうか?

以上、教えて下さい。

A 回答 (2件)

>System.out.print((char)b);


>とありますが、変数bには数値が入っていると考えられます。
>これは、変数bの整数が、(char)でキャストされる事によって、
>再び、文字に「変換」されているのでしょうか?

これはとても手抜きなやり方です。
標準入力から読み込まれた文字列が「1文字=1バイト」で表せる文字だけに限られていてしかもその文字コードがUnicodeの文字コードと一致する場合だけ期待した出力が得られます。
ASCIIの範囲内の英数字や記号類であればこの条件を満たすため、たまたま動いているように見えるだけです。
    • good
    • 0

> (1)ユーザが入力した文字(整数ではない)が、何故、int型の変数に代入出来るのでしょうか?



http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/in …
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …

「System.in.read()」(InputStream)は標準入力をバイトで扱い、戻り値がint型だからです。
また標準入力は文字とは限りません。


> (2)read()メソッドはint型の戻り値を持つようですが、EOFの"-1"以外の時は、
 どんな数値が返されているのでしょうか?

リファレンスを読んだ方が正確で分かりやすいですね。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …


> これは、変数bの整数が、(char)でキャストされる事によって、
> 再び、文字に「変換」されているのでしょうか?

キャストは単に型を合せるだけですが、文字に変換といえば、まぁそうですね。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!