11
class MyClass {
    void myMethod(byte b) {
        System.out.print("myMethod1");
    }

    public static void main(String [] args) {
        MyClass me = new MyClass();
        me.myMethod(12);
    }
}

myMethod()引数がintリテラルであり、パラメーターbがバイト型であるため、このコードはコンパイル時エラーを生成することを理解しています。(これは、引数に明示的なバイト キャストを使用することで回避できます: myMethod((byte)12))

class MyClass{
    byte myMethod() {
        return 12;
    }

    public static void main(String [ ] args) {
        MyClass me = new MyClass();
        me.myMethod();
    }
}

intこれを経験した後、12 がリテラルで戻り値の型myMethod()がバイトであることを考慮すると、上記のコードでもコンパイル時エラーが発生すると予想しました。しかし、そのようなエラーは発生しません。(明示的なキャストは必要ありません: return (byte)12;)

ありがとう。

4

3 に答える 3

11

この場合、Java はナローイングをサポートします。代入変換に関するJava 言語仕様から:

byte変数の型が、short、またはcharであり、定数式の値が変数の型で表現できる場合、縮小プリミティブ変換を使用できます。

于 2012-12-17T13:38:39.457 に答える
2

Javaプリミティブデータ型リファレンスから:

byte: byte データ型は、8 ビットの符号付き 2 の補数整数です。最小値は -128 で、最大値は 127 (両端を含む) です。

128 を返してみてください: ))

于 2012-12-17T13:34:07.477 に答える
0

これはbyte b = 4、値が範囲内にある限り機能しますが、範囲外であるbyte b = 2000ため、次のようなことを試みるとコンパイル エラーが発生します。12範囲内なのでエラーになりません。

于 2012-12-17T13:35:44.197 に答える