Java:なのはなぜ受信のエラーメッセージ"タイプのミスマッチ:変換できないときはintバイト"

StackOverflow https://stackoverflow.com/questions/81392

質問

場合宣言変数の型バイトまたは短いることを試みを行う算術演算は、このエラー"のミスマッチ:変換できないときはint短"(または相当に"タイプのミスマッチ:変換できないときはintバイト").

byte a = 23;
byte b = 34;
byte c = a + b;

この例では、コンパイルエラーのライン。

役に立ちましたか?

解決

は算術演算子が定義されて動作する数値タイプに従って、Java言語仕様(5.6.2バイナリの数値の推進),オペランドのbyte型と短いて自動的に推進するintてしまいます。

を行う算術演算変数のbyte型は、必ず同封して、表示の内部に閉じ込められた業務として実施されるものでint型、キャストの結果、ご希望タイプです。

byte a = 23;
byte b = 34;
byte c = (byte) (a + b);

こちらのフォローをいかに実際のJavaの日付:なぜですか?種類のバイトが短いは数値です。なぜJavaできない直接計算業務をこすか?(答えはない"精度の損失"として明確な理由がなに変換するint。)

更新:jrudolphされることを行動に基づく業務のJVMに、具体的には、唯一のフル-ダブルワードの事業者を実施しています。そのため、オペレーターにバイトショートパンツ、なに変換する必要があint.

他のヒント

その答えを追質問はこちら:

オペランドのbyte型と短いて自動的に推進するintする前に事業者

なお、 ab ともに変換され int 前についての+演算子です。の結果を intsとは int.しようとして割り当てること intbyte 値が原因のエラーがあるので、潜在的損失の精度。による明示的に鋳造のまちのコンパイラの"知っていないということ".

と思い、案件は、JVMのみをサポートの二種類のスタック値:語サイズのダブル言します。

そう決めることが必要で唯一運転された単語中の整数のスタックです。であiadd,imulなbytecodeレベルなければならない事業者のためのバイトショーツ).

いたしますので、あくint値としてこれらの操作をJavaできない安全な変換後のバイトのshortデータの種類です。その力でキャストの値を戻しをバイト/短い。

の通りです:この挙動はありませんのint値です。できない問題を追加二つのint値を得ないエラーの場合は結果があります。

Java言語を常に促進引数の算術演算子をint、long、floatまたはdouble.その表現

a + b

a、b型のバイトになります。この表記:

(int)a + (int)b

この表現はint型.ることは明らかでないエラーを割り当てる際にint値をbyteに変更します。

理由はいろいろな言語であることを定義す。から検証を行うこととなった60億た70、a+bの-126整数型オーバーフロー.の一環として、より複雑な表現すると予想される結果をint、このとなりにくくなる場合もあります利用を制限するのbyte、short配列に保管定数ファイル形式-ネットワークプロトコルおよびpuzzlers.

いう興味深い記録からJavaPolis2007年.James Goslingを例につ複雑な算術符号なしと、なぜなJava).ジBlochポイントが彼の例では、間違ったとえば通常の署名の演算です。のための算数理解し、必要な任意の精度。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top