問題は+、Java の演算子がオーバーロードされていることです。文字列連結または数値加算のいずれかを意味します。何が起こっているかというと、いくつかの+操作が数値の加算ではなく文字列の連結として扱われているということです。
式の前後に一連の括弧を追加する必要があります。
System.out.println("result="+((44334*(220*220))+ (81744*220) + 39416));
または一時変数を使用します。
int res = (44334*(220*220))+ (81744*220) + 39416;
System.out.println("result="+res);
Java が意味を決定するために使用する「ルール」は、+大まかに次のとおりです。
- 左または右のオペランドの型が文字列の場合、
+文字列連結を意味します。
- 左オペランドと右オペランドの両方の型がプリミティブ数値型または数値ラッパー型である場合、
+は数値加算を意味します。
- それ以外の場合、これはコンパイル エラーです。
ここでのもう 1 つの問題は、が最大値 -2163788696より大きいことです。したがって、(オーバーフローなしで) 正しい答えを得るには、Java に算術演算を使用するように指示する必要があります。例えばint2147483647long
System.out.println("result=" + ((44334L * (220 * 220)) + (81744 * 220) + 39416));
そうしないresultと、負の数になります...この例では。
を使用することもできますBigIntegerが、少し面倒なので、longここでは問題なく機能します。