【问题标题】:Space efficient conversion from Wrapper to primitive and primitive to Wrapper从 Wrapper 到原始和原始到 Wrapper 的空间高效转换
【发布时间】:2012-09-24 14:04:36
【问题描述】:

给定以下函数:

public void convertToWrapper(long[] longsToConvert)  
{    

}  

public void convertToPrimitive(Long[] longsToConvert)  
{  
}  

Apache ArrayUtils 公开以下内容:

public Long[] toObject(long[] longs){
    final Long [] result = new Long [array.length];
        for (int i = 0; i < array.length; i++) {
             result[i] = new Long (array[i]);
         }
}

我的问题是有没有办法只使用一个数组来做到这一点?我尝试了以下不起作用的方法:

for(int i =0;i<array.length;i++)  
{  
     array[i] = new Long(array[i]);
}  

【问题讨论】:

  • 我不认为这是可能的。
  • 请注意,这样写可能更有效:array[i] = Long.valueOf(array[i]); 而不是 array[i] = new Long(array[i]);,因为 Longs 通常缓存在 -128 和 +127 之间(即使 JLS 不需要它) )。
  • 请注意 Long.valueOf 是在 1.5 中添加的,我猜这解释了 ArrayUtils 代码。

标签: java performance memory-efficient


【解决方案1】:

没有。 Long[]long[] 的类型不同,因此分配将失败。

【讨论】:

  • 我明白,但是,我的印象是我可以打开包装器。类似于自动装箱。
  • 是的,您可以打开包装。但是Long[] 首先是array,其次是Long
猜你喜欢
  • 2014-02-02
  • 2012-12-06
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多