这可能是一个愚蠢的问题,但是foo()和之间有什么区别bar()吗?
private static File[] foo() {
return Collections.emptyList().toArray(new File[0]);
}
Run Code Online (Sandbox Code Playgroud)
private static File[] bar() {
return new File[0];
}
Run Code Online (Sandbox Code Playgroud)
我试图想出返回空数组的最佳方法,而不是null.
有时我需要返回空数组来完成一些类合同.
而不是总是创建一个空数组:
@Override public String[] getDescriptionTexts() {
return new String[0]; // no texts
}
Run Code Online (Sandbox Code Playgroud)
我认为从常量中重用一个空数组可能更好:
public class Strings {
public static final String[] EMPTY_ARRAY = new String[0];
}
@Override public String[] getDescriptionTexts() {
return Strings.EMPTY_ARRAY; // no texts
}
Run Code Online (Sandbox Code Playgroud)
这种优化值得吗?
有没有人知道是否有办法从Java返回两个值(接近)零开销?我只是在寻找两个值 - 我有几个用例来处理一个字节数组(需要返回值和下一个起始位置)来尝试返回一个带有错误代码的值来做一些丑陋的修复 - 点计算并需要整个和小数部分.
我不低于一些非常丑陋的黑客.功能很小,Hotspot很高兴地介绍它.所以现在,我只需要让Hotspot基本上忽略任何对象创建或位移.
如果我将我的返回值限制为整数,我已经尝试将它们打包成长,但即使在内联之后,Hotspot似乎也无法弄清楚所有的位移和掩码都没有真正做任何事情而且它很乐意打包并解压缩注入相同的值(显然,Hotspot的窥孔优化器需要帮助的地方).但至少我不是在创造一个对象.
我更难的情况是,当我需要返回的项目之一是引用而另一个是长引用或另一个引用时(对于int情况,我认为我可以压缩OOP并使用上面描述的位填充).
有没有人试图让Hotspot为此生成无垃圾代码?现在最糟糕的情况是我必须携带一个物体然后传递它,但我想保持它自包含.线程本地是昂贵的(哈希查找),它需要是可重入的.