What is the relative performance difference of if/else versus switch statement in Java?

前端 未结 8 1344
北恋
北恋 2020-11-22 16:25

Worrying about my web application\'s performances, I am wondering which of \"if/else\" or switch statement is better regarding performance?

8条回答
  •  旧巷少年郎
    2020-11-22 16:51

    Use switch!

    I hate to maintain if-else-blocks! Have a test:

    public class SpeedTestSwitch
    {
        private static void do1(int loop)
        {
            int temp = 0;
            for (; loop > 0; --loop)
            {
                int r = (int) (Math.random() * 10);
                switch (r)
                {
                    case 0:
                        temp = 9;
                        break;
                    case 1:
                        temp = 8;
                        break;
                    case 2:
                        temp = 7;
                        break;
                    case 3:
                        temp = 6;
                        break;
                    case 4:
                        temp = 5;
                        break;
                    case 5:
                        temp = 4;
                        break;
                    case 6:
                        temp = 3;
                        break;
                    case 7:
                        temp = 2;
                        break;
                    case 8:
                        temp = 1;
                        break;
                    case 9:
                        temp = 0;
                        break;
                }
            }
            System.out.println("ignore: " + temp);
        }
    
        private static void do2(int loop)
        {
            int temp = 0;
            for (; loop > 0; --loop)
            {
                int r = (int) (Math.random() * 10);
                if (r == 0)
                    temp = 9;
                else
                    if (r == 1)
                        temp = 8;
                    else
                        if (r == 2)
                            temp = 7;
                        else
                            if (r == 3)
                                temp = 6;
                            else
                                if (r == 4)
                                    temp = 5;
                                else
                                    if (r == 5)
                                        temp = 4;
                                    else
                                        if (r == 6)
                                            temp = 3;
                                        else
                                            if (r == 7)
                                                temp = 2;
                                            else
                                                if (r == 8)
                                                    temp = 1;
                                                else
                                                    if (r == 9)
                                                        temp = 0;
            }
            System.out.println("ignore: " + temp);
        }
    
        public static void main(String[] args)
        {
            long time;
            int loop = 1 * 100 * 1000 * 1000;
            System.out.println("warming up...");
            do1(loop / 100);
            do2(loop / 100);
    
            System.out.println("start");
    
            // run 1
            System.out.println("switch:");
            time = System.currentTimeMillis();
            do1(loop);
            System.out.println(" -> time needed: " + (System.currentTimeMillis() - time));
    
            // run 2
            System.out.println("if/else:");
            time = System.currentTimeMillis();
            do2(loop);
            System.out.println(" -> time needed: " + (System.currentTimeMillis() - time));
        }
    }
    

    My C# standard code for benchmarking

提交回复
热议问题