- PR -

三項演算子について

1
投稿者投稿内容
パワーエサ
会議室デビュー日: 2001/12/12
投稿数: 6
投稿日時: 2001-12-12 19:41
パワーエサと申します。

同じ機能をif文で記述した場合と
三項演算を用いて記述した場合を比較すると、
両者のパフォーマンスに違いはあるのでしょうか?

例えばcの値にa,bのうち値の小さい方を代入したいような場合、
@とAのどちらで記述するべきでしょうか?

@if文
if(a<=b){
c = a;
}else{
c = b;
}

A三項演算
c = (a<=b) ? a : b ;
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2001-12-12 23:54
JavaはC/C++とは違ってif文は評価できません。
Aは評価結果が欲しいときに使われます。

使い分けは、プログラムが読みやすいかどうかという観点でどちらが適切かという判断をおこなうのが一般的だと思います。私はリターン文やメソッド引数としてスッキリ書ける場合にAを使うことが多いです。

[ メッセージ編集済み 編集者: miki 編集日時 2001-12-13 09:18 ]
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2001-12-13 13:15
コンパイル時最適化にも、実行時最適化にも影響するので、一概にはいえないでしょう。
参考ながら、

コード:
public class IfTest {
  static public void main (String[] args) {
    int a = 1; int b = 2; int c = 3;
    System.out.println("aaa");
    if ( a >= b ) { c = a; } else { c = b; }
    System.out.println("aaa");
    c = ( a >= b ) ? a : b ; 
    System.out.println("aaa");
  }
}


を javap -c でディスアセンブルした時の該当する部分は

前者:
14 iload_1
15 iload_2
16 if_icmplt 24
19 iload_1
20 istore_3
21 goto 26
24 iload_2
25 istore_3

後者:
34 iload_1
35 iload_2
36 if_icmplt 43
39 iload_1
40 goto_44
43 iload_2
44 istore_3

というわけで、後者のほうが 20 と 25 が 44 にまとまっている、程度ですね。
少なくともこの例では、性能差が出るとは思えません。
(IBM-JDK 1.3)


1

スキルアップ/キャリアアップ(JOB@IT)