[解決済み] なぜ int i = 1024 * 1024 * 1024 * 1024 はエラーなしでコンパイルできるのですか?
2022-04-27 03:54:11
質問
の限界は?
int
は-2147483648から2147483647までです。
と入力すると
int i = 2147483648;
と入力すると、Eclipse は "2147483648" の下に赤いアンダーラインを表示します。
でも、こうすると
int i = 1024 * 1024 * 1024 * 1024;
であれば、問題なくコンパイルできます。
public class Test {
public static void main(String[] args) {
int i = 2147483648; // error
int j = 1024 * 1024 * 1024 * 1024; // no error
}
}
Javaの基本的な質問かもしれませんが、なぜ2番目のバリアントではエラーが出ないのか、さっぱりわかりません。
どのように解決するのですか?
4つの数値を掛け合わせてint型に代入しているだけなので、たまたまオーバーフローが発生しただけで、この文は何も間違っていません。これは、1つの リテラル これはコンパイル時に境界チェックが行われます。
それは、境界外の リテラル ではなく、エラーの原因となる 代入 :
System.out.println(2147483648); // error
System.out.println(2147483647 + 1); // no error
これに対して
long
リテラルは問題なくコンパイルできます。
System.out.println(2147483648L); // no error
なお、実際には、結果
は
はコンパイル時に計算されるため、まだ
1024 * 1024 * 1024 * 1024
は
定数式
:
int i = 1024 * 1024 * 1024 * 1024;
になります。
0: iconst_0
1: istore_1
その結果 (
0
) を単純にロードして保存するだけで、乗算は行われません。
から JLS §3.10.1 (コメントで話題に出してくれた@ChrisKさんに感謝)。
型の10進数リテラルを使用すると、コンパイル時のエラーになります。
int
よりも大きい場合は2147483648
(2 31 ) の場合、または10進数リテラル2147483648
が単項マイナス演算子のオペランド以外の場所に現れた場合 ( §15.15.4 ).
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
Spring Boot による HTTPS アクセスの設定
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
JQuery DataTable 详解
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。