有谁知道一个高效,快捷,干净的方式Long[]
转换为long[]
,反之亦然Java中的明显的环带(UN)箱&副本外面?长[]要长[],反之亦然?
注意:这是不是关于拆箱Long
或拳击long
。我明确地谈论数组!
“没有比回路更好的办法,并复制”也将是一个答案;)
编辑: 我知道做上述的含义,它是更好地避免它。假设,我无法避免它,并希望尽可能聪明地做到这一点,而不使用第三方的东西。
有谁知道一个高效,快捷,干净的方式Long[]
转换为long[]
,反之亦然Java中的明显的环带(UN)箱&副本外面?长[]要长[],反之亦然?
注意:这是不是关于拆箱Long
或拳击long
。我明确地谈论数组!
“没有比回路更好的办法,并复制”也将是一个答案;)
编辑: 我知道做上述的含义,它是更好地避免它。假设,我无法避免它,并希望尽可能聪明地做到这一点,而不使用第三方的东西。
没有比循环更好的方式和复制
最好的解决方案是避免首先转换。如果您担心效率,请避免使用Long[]
,因为它比long[]
大很多倍如果您需要使用集合,则可以尝试包装long []的TLongArrayList。
+1 - 寻求最佳解决方案。 –
@StephenC干杯。 :) –
首先提出问题的先决条件是,由于我的管辖范围之外的原因,我无法避免转换。我只是想,如果我无法避免它,我至少希望尽可能聪明地做到这一点。 – Fildor
当的Java盒/ unboxes,它实际上做一些事情,即使它没有展示给用户。
Long[]
和long[]
是非常不同的对象。所以答案是,不,你必须循环和复制。但更好的问题是,你为什么需要这个?几乎在任何情况下都可以互换使用它们......您必须在实施中决定对您来说什么更重要,对象创建或内存使用情况。希望你用Long.valueOf
创建您Long
S(或自动装箱)使用Java的缓存Long
值。
这是apache common lang的ArrayUtils.toPrimitive
的来源。它使用一个循环。
public static long[] toPrimitive(Long[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return EMPTY_LONG_ARRAY;
}
final long[] result = new long[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i].longValue();
}
return result;
}
Java本身并没有提供任何方式来将对象数组转换为元组数组。
ArrayUtil Reference希望这有助于。
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
没有比环路及复印件,包裹在一个辅助功能,更好的方法,你可以用一遍又一遍。
如果使用apache commons lang你可以这样做:
long[] primitive = ArrayUtils.toPrimitive(new Long[]{1L, 2L, 3L, 4L});
您可以用阿帕奇ArrayUtils做详见这里:
我会去循环和复制真的。 – OmniOwl
“没有比循环和复制更好的方法了:)” - Java对于它的数组类型非常严格。 'Cast-style'转换不起作用,自动拆箱不适用于数组(但?)。 – JimmyB
为什么你需要那个? – dantuch