[解決済み] if "の構成は、文と三項演算子のどちらが速いか?
2023-06-01 16:47:01
質問
の2種類があります。
if
ステートメントがあります。
if {} else {}
と略記します。
exp ? value1 : value2
. 一方は他方より速いのでしょうか、それとも同じなのでしょうか?
の文があります。
int x;
if (expression) {
x = 1;
} else {
x = 2;
}
三項演算子です。
int x = (expression) ? 1 : 2;
どのように解決するのですか?
そこには、"if"文の1つのタイプしかありません。もう 1 つは条件式です。どちらがより良いパフォーマンスを発揮するかについては、同じバイトコードにコンパイルすることができ、同じように動作すると予想されますが、パフォーマンスの面でどちらかを選択したいとは絶対に思わないほど近いです。
時々
if
文の方が読みやすい場合もあれば、条件演算子の方が読みやすい場合もあります。特に、2つのオペランドが単純で副作用がない場合は条件演算子を使うことをお勧めします。一方、2つの分岐の主目的である
は
である場合は、おそらく
if
ステートメントを使うでしょう。
以下はサンプルプログラムとバイトコードです。
public class Test {
public static void main(String[] args) {
int x;
if (args.length > 0) {
x = 1;
} else {
x = 2;
}
}
public static void main2(String[] args) {
int x = (args.length > 0) ? 1 : 2;
}
}
でデコンパイルしたバイトコード
javap -c Test
:
public class Test extends java.lang.Object {
public Test();
Code:
0: aload_0
1: invokespecial #1
4: return
public static void main(java.lang.String[]
Code:
0: aload_0
1: arraylength
2: ifle 10
5: iconst_1
6: istore_1
7: goto 12
10: iconst_2
11: istore_1
12: return
public static void main2(java.lang.String[
Code:
0: aload_0
1: arraylength
2: ifle 9
5: iconst_1
6: goto 10
9: iconst_2
10: istore_1
11: return
}
ご覧のように、このページには
わずか
バイトコードに違いがあります。
istore_1
が発生するかどうかですが、JITter が異なるネイティブ コードで終了した場合、私は非常に驚かなければなりません。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
maven レポート エラー 解決不可能な親POM
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] <は<=より速いのか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] なぜJavaでは2 * (i * i)の方が2 * i * iより速いのですか?
-
[解決済み】静的なMapを初期化する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
Java の switch case 文で必要な定数式の問題の解決法
-
強制型変換について
-
Junitのユニットテストはjava.lang.Testを報告します。
-
セミコロン期待値エラー解決
-
java.sql.SQLException: 結果セットの開始前
-
maven レポート エラー 解決不可能な親POM
-
Java の double データ型における 0.0 と -0.0 の問題
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
htmlとwordの相互変換の実装(画像あり)