在Jdk1.5的版本中,<em>java</em>增加了一个新功能叫做Varargs。有意思的是,Varargs是一个冰岛语的单词。我们使用百度翻译发现这个单词的中文释义为“可变参数”。我们怎么理解这个Varargs呢?在<em>java</em>中,可变参数
2021-05-26 13:30:18
在Jdk1.5的版本中,java增加了一個新功能叫做Varargs。有意思的是,Varargs是一個冰島語的單詞。我們使用百度翻譯發現這個單詞的中文釋義為「可變參數」。
我們怎麼理解這個Varargs呢?
在java中,可變參數是指指定類型的數量可變的一個及以上的入參變數。其核心的特點可以用一句話來表述「數量可變的同類參數」,英文單詞表示為「variable number of arguments」。
定義可變參數的方式非常簡單,直接在參數類型與參數名稱之間加上一個英文狀態的省略號「...」即可。
請看下方程式程式碼,程式展示了可變參數的傳參、元素數量、取元素的方法:
小夥伴們,有沒有發現可變參數與陣列很相似?不用猜了,我們做個試驗你就一目瞭然了。下圖是debug模式時,檢視到的可變參數的類型:
我們與陣列做個比較:
可以看到兩者是一樣的結構。所以我們能夠得出可變參數實際上是構造了一個元素數量不固定的陣列,陣列元素的個數由我們呼叫方法時傳參的個數來決定。
看到這裡,相信小夥伴們已經明白了可變參數是什麼,也大體知道了怎麼使用。但是我在這裡提醒大家注意一個點:一個方法的入參只能有一個可變參數。如果傳入參數的數量在2個及以上,那麼可變參數必須放在最後,否則編譯不通過。如圖:
有小夥伴會問:上圖的查詢中第一個參數我不傳int類型變數,而是傳入與str這個可變參數類型一樣的字元串String。這樣會有問題嗎?
當然沒有問題了。可變參數傳參看起來與傳入多個參數是一樣的,如圖2中main方法呼叫test方法時傳入的實際上是test方法的可變參數str,但是看上去就像傳入三個參數一樣。如果我們將圖5中的int a改為String a,在呼叫時,由於第一個參數是String a,按照傳參的順序,呼叫test方法時第一個傳入的字元串參數就是變數a。而變數a之後傳入的多個字元串則會被編譯器認為是可變參數str的值。
可變參數的缺點:效能不高,會影響程式的執行效率。可變參數方法每次被呼叫都會進行一次陣列容量的重新分配和陣列變數初始化。所以如果是固定長度的同類型元素作為參數,建議直接創建和使用陣列。
小夥伴們,你們get到這個技能了嗎?
#java專欄#
相關文章
在Jdk1.5的版本中,<em>java</em>增加了一个新功能叫做Varargs。有意思的是,Varargs是一个冰岛语的单词。我们使用百度翻译发现这个单词的中文释义为“可变参数”。我们怎么理解这个Varargs呢?在<em>java</em>中,可变参数
2021-05-26 13:30:18
首先在硬件方面,一加9Pro搭载了<em>高通</em>骁龙最新的888顶级5G移动平台,芯片采用先进的5nm工艺制程,主频最高可达2.84GHz。其存储组合则包括为8GB+128GBB、8G+256GB以及12GB+256GB三种配置,在目前短视频盛行的当下
2021-05-26 13:00:26
在国产手机算中等水平,电池容量4500mAh实测下来非常耐用,整机重量才196克。这么大的电池配上这个重量值得称赞。6400万三摄,没有突出镜头,三颗都只能说中规中矩。前摄自拍还可以,效果甚至超过了一些主流旗舰机,处理器是<em>
2021-05-26 13:00:22
字母后面的数字代表价格定位,数字越高价格也越高。最后的字母代表版本号,一般按照A-Z字母顺序来进行版本新旧排列。PRO、MAX代表该型号的功能拓展。核心配置:四核CA73操作更流畅 GPU区别不大,主要是<em>CPU</em>的区别,四
2021-05-26 12:31:39
iReader Light2搭载一颗全球首发的墨水屏专属 <em>CPU</em>双核2.0GHz且内置一块1700毫安大电池,加上掌阅iReader研发的新一代休眠超低功耗技术,对比上一代Light青春版,阅读续航提升50%,待机时长提升13%,实测待机时长
2021-05-26 12:31:35
处理器方面,一加9R搭载了高通骁龙870+UFS 3.0存储的组合,使用的是<em>CPU</em>核心与骁龙865+相同1+3+4架构,只是骁龙870的超大核心主频高达3.2GHz,相较于骁龙865 +提高了100MHz。通过安兔兔跑分来看,一加9R分数高达716588
2021-05-26 12:31:19