You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

局部变量存储与重复计算:哪种更高效?是否有更优替代方案?

优化你的文件扩展名处理逻辑

嘿,我注意到你这段代码里有个可以优化的点:你先是获取扩展名并修改,但后面需要原扩展名时又重复调用ff.getAbsolutePath().substring(...)来计算,这不仅冗余,还会让代码变得啰嗦,甚至可能在极端场景下出现不一致(比如文件路径中途被修改的情况)。

这里给你一个更清晰、高效的处理方案:

核心思路:提前保存原始扩展名

把原始的扩展名在一开始就单独存到变量里,后面需要的时候直接调用这个变量就行,不用重复计算路径的子串。

改进后的代码示例

// 假设ff是你的File对象
File ff = new File("your-file-path.mp4");

// 第一步:获取并保存原始扩展名
String absolutePath = ff.getAbsolutePath();
int lastDotPosition = absolutePath.lastIndexOf(".");
// 处理没有扩展名的情况,避免索引越界
String originalExtension = lastDotPosition != -1 ? absolutePath.substring(lastDotPosition) : "";

// 第二步:处理扩展名修改逻辑
String modifiedExtension = originalExtension;
if (modifiedExtension.equals(".mp4")) {
    modifiedExtension = ".avi";
}

// --- 中间执行你的业务代码 ---
// ... 这里放你原来的若干代码 ...

// 第三步:需要原扩展名时,直接用提前保存的变量
method(originalExtension);

额外优化建议

如果你的项目用的是Java 7及以上,可以借助Path API来更优雅地获取文件名和扩展名,代码可读性会更好:

Path filePath = ff.toPath();
String fileName = filePath.getFileName().toString();
int lastDot = fileName.lastIndexOf(".");
String originalExtension = lastDot != -1 ? fileName.substring(lastDot) : "";

如果可以引入第三方工具类(比如Apache Commons IO的FilenameUtils),获取扩展名会更简洁:

// 需要先引入Apache Commons IO依赖
String originalExtension = "." + FilenameUtils.getExtension(ff.getName());

为什么要这么改?

  • 减少冗余计算:不用重复调用getAbsolutePath()和substring(),提升代码执行效率(虽然单次计算影响不大,但养成好习惯很重要)
  • 代码更清晰:变量名明确区分originalExtension和modifiedExtension,别人读代码时一眼就能明白各自的用途
  • 避免潜在问题:统一计算一次原始路径,避免多次调用可能带来的不一致风险

内容的提问来源于stack exchange,提问作者varmashrivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:39:34