1

123をdisplayメソッドに渡すと、変数by1を使用して同じ値を渡すのにエラーが発生するのはなぜですか。JVMによって受け入れられます。

これらの次の 2 つのステートメントの違いは何ですか 1.serv.display(123); 2.serv.display(by1);

public class Lab1 {

public static void main(String[] args) {
    MethodService serv=new MethodService();
    byte by1=123;
    serv.show(123);
    serv.show(by1);
    serv.display(123);
    serv.display(by1);
    }
}

class MethodService{
void show(int ab){
    System.out.println("---show(int)\t:"+ab);
}
void display(byte by1){
    System.out.println("display(byte)\t:"+by1);
}
}
4

5 に答える 5

6
serv.display(123);

値を受け入れる名前表示のメソッドがないため、エラーがスローされintます。

とinput のserv.show両方で機能する理由は、メソッドの入力タイプが であるためです。これにより、メソッドは、コンパイラによって int に自動変換できる入力型を受け入れることができます。そのため、(8 ビット)などのメモリ ビット (32 以下) を必要としないデータ型は、int 値に自動変換されます。byteintintbyte

ただしserv.displaybyteこのメソッドは、バイトに自動変換できる入力、つまり 8 ビット以下の任意の入力を受け取ることができることを意味します。を渡すと、32ビットが必要であり、ビット範囲int外であるため自動変換できません。byteしたがって、コンパイラはエラーをスローします。

于 2013-09-14T10:51:50.347 に答える
2

メソッドはdisplay(byte b1)を受け入れますbyte。あなたはコンパイラによって123扱われるものを渡していますint

于 2013-09-14T10:46:27.160 に答える
0

キャストを追加する必要があります。

serv.display((byte)123); // requires a cast

キャストが必要な場合とそうでない場合があります。以下に、いつ、なぜそれが必要なのかを説明するための簡単な説明を示します。

Java にはいくつかのプリミティブ型があります。

  • バイト (8 ビット)
  • ショート (16 ビット)
  • int (32 ビット)
  • 長い (64 ビット)

int32 ビット ( ) の値を 8 ビット ( byte) の変数に代入すると、実際には数値の 24 ビットが失われるため、これは重要です。このタイプの変換は、ナローイング プリミティブ変換と呼ばれます。cast安全のために、 ( などの)を明示的に指定した場合にのみ、コンパイラはこれを受け入れます(byte)123

したがって、簡単に言えば、より大きな型 (より多くのビット) の値または変数をより小さな型 (より少ないビット) の値または変数に渡すときはいつでも、キャストが必要になります。

(逆)byte (8 ビット) を(16 ビット)に渡す必要がある場合intは問題ありません。コンパイラはデータが失われないことを認識しており、コードは明示的なキャストなしでコンパイルされます。そのため、次の行をキャストする必要はありません。

serv.show(by1); // does not require casts.

ここで、実際に整数をバイトに割り当てたコードの最初の行について疑問に思うかもしれません。したがって、理論的には、一部のビットが失われる可能性があります。

byte by1 = 123; // assignments do not require casts.

ただし、Java での代入変換は、メソッド呼び出し変換よりも寛容 (または単にスマート) です。コンパイラは、上記の値 ( 123) が 内に収まることを認識しておりbyte、それを許容します。

于 2013-09-14T14:18:21.757 に答える
0

表示メソッドは型の引数を受け入れ、byte整数を渡しています123

于 2013-09-14T11:03:11.397 に答える
0

serv.display(123);

MethodService 型のメソッド display(byte) は、引数 (int) には適用されません。

于 2013-09-14T10:58:59.897 に答える