zoukankan      html  css  js  c++  java
  • 可变参数

    /*
     * 可变参数:定义方法的时候不知道该定义多少个参数
     * 格式:
     *         修饰符 返回值类型 方法名(数据类型…  变量名){
     * 
     *         }
     * 
     *         注意:
     *             这里的变量其实是一个数组
     *             如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
     */                
    public class ArgsDemo {
        public static void main(String[] args) {
            // 2个数据求和
            int a = 10;
            int b = 20;
            int result = sum(a, b);
            System.out.println("result:" + result);
    
            // 3个数据的求和
            int c = 30;
            result = sum(a, b, c);
            System.out.println("result:" + result);
    
            // 4个数据的求和
            int d = 30;
            result = sum(a, b, c, d);
            System.out.println("result:" + result);
    
            // 需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了
            // 为了解决这个问题,Java就提供了一个东西:可变参数
            result = sum(a, b, c, d, 40);
            System.out.println("result:" + result);
    
            result = sum(a, b, c, d, 40, 50);
            System.out.println("result:" + result);
        }
    
        public static int sum(int... a) {
        
            int s = 0;
            
            for(int x : a){
                s +=x;
            }
            
            return s;
        }
    
    }

    可变参数底层其实是一个数组,下面是通过反编译工具参看的字节码内容:

    import java.io.PrintStream;
    
    public class ArgsDemo
    {
    
        public ArgsDemo()
        {
        }
    
        public static void main(String args[])
        {
            int a = 10;
            int b = 20;
            int result = sum(new int[] {
                a, b
            });
            System.out.println((new StringBuilder("result:")).append(result).toString());
            int c = 30;
            result = sum(new int[] {
                a, b, c
            });
            System.out.println((new StringBuilder("result:")).append(result).toString());
            int d = 30;
            result = sum(new int[] {
                a, b, c, d
            });
            System.out.println((new StringBuilder("result:")).append(result).toString());
            result = sum(new int[] {
                a, b, c, d, 40
            });
            System.out.println((new StringBuilder("result:")).append(result).toString());
            result = sum(new int[] {
                a, b, c, d, 40, 50
            });
            System.out.println((new StringBuilder("result:")).append(result).toString());
        }
    //可以看出在这里已经优化为一个数组了
        public static transient int sum(int a[])
        {
            int s = 0;
            int ai[];
            int j = (ai = a).length;
            for (int i = 0; i < j; i++)
            {
                int x = ai[i];
                s += x;
            }
    
            return s;
        }
    }
  • 相关阅读:
    【JavaScript数据结构系列】04-优先队列PriorityQueue
    【JavaScript数据结构系列】02-栈Stack
    【JavaScript数据结构系列】01-数组Array
    【JavaScript数据结构系列】00-开篇
    2019个人年度总结
    批处理·命令行中常用的操作
    flutter 环境出错后排查
    [图解算法]线性时间选择Linear Select——<递归与分治策略>
    阿里云轻量应用服务器——配置MySQL远程连接(踩坑,LAMP+CentOS)
    [知识复习] C语言文件读写
  • 原文地址:https://www.cnblogs.com/itboys/p/6146348.html
Copyright © 2011-2022 走看看