java中可变长参数会被编译器包装为一个数组,那跟定义数组类型的形参相比有什么优势呢?
优势就是你可以在调用该方法的时候放入任意个(也可以没有参数)该类型的参数,中间以逗号隔开。
就相当于有了有参和无参两个方法。有参的也没有必要先创建一个数组在调用方法了。
有什么优势呢,这个你的用过才知道。举个简单的例子,就拿去数据库查询数据吧。
你现在要写一个框架,就是去数据库里面查询数据。但是有一个问题,就是查询的sql语句可能是这样的
select * from user where id = ?
也有可能是这样的
select * from user where name = ? and age = ?
首先这是一种比较常见的sql语句,为了解决这个问题,你框架类可能就这么定义了
queryObject(String sql, Object sqlArgs) 然后第二个方法就是 queryObject(String sql, object sqlArgs1, object sqlArgs2)
也许你已经感觉麻烦了,万一3个参数的呢,4个参数的呢,N个参数的呢?总不能从1写到N吧,于是机制的你想到了数据。
于是方法就是这样了。
queryObject(String sql, Object[] args)
很完美,于是接口开放出去了,然后大量程序猿开始使用了。他们代码里面就是:
queyrObject("select * from user ", new Object[])
queyrObject("select * from orders ", new Object[])
queyrObject("select * from teacher ", new Object[])
于是他们开始骂娘了,每次写个sql,我都要写个new Object【】,真烦,那个傻逼写的
如果你用可变参数呢?queryList(String sql, Object... args)
你可以这么写:queryList("select * from user") 也可以 queryList("select * from user where id = ? and name = ?", 1, "张三“);
所以,你懂了好处了吗