类型后面三个点(String...)和数组(String[])的区别

本文深入探讨了可变长参数在编程中的应用,解释了如何定义和调用带有可变长参数的方法,以及与普通数组参数的区别。文章指出,一个方法只能有一个可变长参数,并且在调用时可以传递任意数量的参数,甚至不传递参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如void test(String...)  ,test("a","b")或者test(new String[]{"a","b"}),而如果形参是数组,void test(String[] books),调用时只能test(new String[]{"a","b"}) ,很麻烦

一个方法最多有一个个数可变的形参,调用的时候,传入

叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String…books),那么你还可以写方法test(),但你不能写test(String[] books),这样会出编译错误,系统提示出现重复的方法。

在使用的时候,对于test(String…strings),你可以直接用test()去调用,标示没有参数,也可以用去test(“aaa”),也可以用test(new String[]{“aaa”,”bbb”})。

另外如果既有test(String…strings)函数,又有test()函数,我们在调用test()时,会优先使用test()函数。只有当没有test()函数式,我们调用test(),程序才会走test(String…strings)。(当然,重载的时候使用个数可变形参是没有什么意义的)
 

### 将超大字符串解析为JSON对象或数组 当处理超大规模的字符串并将其转换为JSON对象或数组时,通常会遇到性能瓶颈以及内存占用过高的问题。以下是几种常见的方法来实现这一目标。 #### 方法一:使用标准库中的`JSON.parse()`(JavaScript) 对于前端开发环境下的字符串转JSON操作,可以利用内置的 `JSON.parse()` 函数完成此任务。该函数能够高效地将合法的JSON字符串解析成对应的 JavaScript 对象或数组结构[^1]。 ```javascript let jsonString = '{"employees":[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}]}'; try { let jsonObject = JSON.parse(jsonString); console.log(jsonObject.employees.length); // 输出员工数量 } catch (e) { console.error('Invalid JSON string:', e.message); } ``` 注意,在实际应用过程中需验证输入数据的有效性以防止潜在的安全隐患如注入攻击等问题发生[^1]。 #### 方法二:分批读取文件流(适用于Node.js后台场景) 如果待处理的数据量极大以至于无法一次性加载到内存当中,则可以通过创建可读流的方式来逐步获取部分内容再逐段解析: ```javascript const fs = require('fs'); const readline = require('readline'); async function processLineByLine(filePath){ const fileStream = fs.createReadStream(filePath); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); for await(const line of rl){ try{ const jsonDataChunk = JSON.parse(line.trim()); processData(jsonDataChunk); // 自定义业务逻辑函数 } catch(error){ console.error(`Error parsing JSON from line ${error}`); } } } function processData(data){ // 实现具体的数据处理流程... } ``` 这种方法特别适合那些存储在磁盘上的巨型JSON文档的情况[^4]。 #### 方法三:借助第三方工具类库优化效率(FastJson为例) 针对Java生态系统而言,阿里巴巴开源项目 Fastjson 提供了一个非常快速且功能强大的API用于序列化/反序列化各种复杂类型的实例至JSON表示形式之间相互转化[^3]: ```java import com.alibaba.fastjson.JSON; import java.util.List; public class Main { public static void main(String[] args) throws Exception { String largeJsonStr = "..."; // 超长JSON串 List<MyEntity> entityList = JSON.parseArray(largeJsonStr, MyEntity.class); System.out.println(entityList.size()); } private static class MyEntity { private int id; private boolean open; private String pId; private String name; @Override public String toString(){ return "MyEntity{id=" + id+", open="+open+", parentId='"+pId+"', name='" +name+"' }"; } } } ``` 通过指定目标实体类型参数给 parseArray 方法即可轻松获得映射后的集合列表[^3]。 --- ### 注意事项 无论采取哪种方式都需要考虑以下几个方面: - 数据合法性校验; - 性能调优策略; - 错误恢复机制设计;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值