Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对象[]转换为长[][]性能问题?_Java_Arrays_Performance_Casting - Fatal编程技术网

Java对象[]转换为长[][]性能问题?

Java对象[]转换为长[][]性能问题?,java,arrays,performance,casting,Java,Arrays,Performance,Casting,您好,我很好奇,执行以下类型的演员阵容是否会对表演造成严重后果?特别是当它的性能达到数百万倍时,谢谢 Object [] car = new Object[1]; car[0] = new Long[2][2]; long[][] values = (long[][]) car[0]; 我要说的是,性能问题是,这种情况完全没有任何意义。你为什么要这样做?我想说的是,性能问题是,这种情况完全没有任何意义。为什么要这样做?您编写的代码将导致类强制转换异常。抛出数百万个类强制转换异常可能会很慢

您好,我很好奇,执行以下类型的演员阵容是否会对表演造成严重后果?特别是当它的性能达到数百万倍时,谢谢

Object [] car = new Object[1];

car[0] = new Long[2][2];

long[][] values = (long[][]) car[0]; 

我要说的是,性能问题是,这种情况完全没有任何意义。你为什么要这样做?

我想说的是,性能问题是,这种情况完全没有任何意义。为什么要这样做?

您编写的代码将导致类强制转换异常。抛出数百万个类强制转换异常可能会很慢。它也不太可能是预期的逻辑。

您编写的代码将导致类强制转换异常。抛出数百万个类强制转换异常可能会很慢。这也不太可能是预期的逻辑。

强制转换实际上不是什么性能问题。它只是让编译器知道如何处理对象的元数据。当然,如果它试图将对象用作错误的类型,您将得到一个
ClassCastException
,这可能会导致性能问题。

强制转换实际上并不是什么性能问题。它只是让编译器知道如何处理对象的元数据。当然,如果它试图将对象用作错误的类型,您将得到一个
ClassCastException
,这可能会导致性能问题。

强制转换的影响取决于您的jvm和使用它的代码。在现代JVM中,cast操作应该得到高度优化,因为它经常用于泛型类,所以它的开销应该非常低


如果您的代码必须快速,您应该对其进行分析以找到瓶颈,这也将解决您的特定情况下的强制转换问题

强制转换的影响取决于jvm和使用它的代码。在现代JVM中,cast操作应该得到高度优化,因为它经常用于泛型类,所以它的开销应该非常低


如果您的代码必须快速,您应该对其进行分析以找到瓶颈,这也将解决您的特定情况下的强制转换问题

您不能执行以下演员阵容。我建议您从一开始就将数组设置为长[][],并且不需要转换数组类型

// these won't work as these are different types of references. 
long[] longs = (long[]) new Long[0];
long[][] longs = (long[][]) new Long[0][];
转换它们的唯一方法是对它们进行迭代

Long[][] longs = ...
long[][] longs2 = new long[longs.length][];
for(int i=0;i<longs.length;i++) {
  longs2[i] = new long[longs[i].length];
  for(int j=0;j<longs[i].length;j++) longs2[i][j] = longs[i][j];
}
Long[]longs=。。。
long[]longs 2=新的long[longs.length][];

对于(int i=0;i您不能执行以下转换。我建议您从一开始就将数组设置为长[][],并且不需要转换数组类型

// these won't work as these are different types of references. 
long[] longs = (long[]) new Long[0];
long[][] longs = (long[][]) new Long[0][];
转换它们的唯一方法是对它们进行迭代

Long[][] longs = ...
long[][] longs2 = new long[longs.length][];
for(int i=0;i<longs.length;i++) {
  longs2[i] = new long[longs[i].length];
  for(int j=0;j<longs[i].length;j++) longs2[i][j] = longs[i][j];
}
Long[]longs=。。。
long[]longs 2=新的long[longs.length][];

对于(int i=0;i如果hotspot可以证明对象实际上很长[],则成本为零,否则它需要进行检查+分支预测,这通常是成功的,并且需要额外(仅一个)cpu周期


强制转换并不像答案中的一个建议那样完全免费,而且它不仅仅是元数据。

如果hotspot可以证明该对象实际上很长[],那么成本是零,否则它需要检查+分支预测,这通常是成功的,并且是额外的(只有一个)cpu周期


强制转换并不完全是免费的,正如其中一个答案所暗示的那样,它不仅仅是元数据。

这样做并不好,性能在这里并不是什么大问题,不仅仅是测试和分析。这可能取决于您使用的JDK,这里提供的答案只会是理论性的。您是否尝试强制转换长[](对象数组)对于长[][](基本数组)还是键入错误?这样做不好,性能不是什么大问题,不仅仅是测试和分析。这可能取决于您使用的JDK,这里提供的答案仅是理论上的。您是否尝试将长[][](对象数组)强制转换为长[][](基本数组)或者这是一个打字错误?+1这似乎是唯一一个真正回答问题而不是吹毛求疵的答案:/+1这似乎是唯一一个真正回答问题而不是吹毛求疵的答案:/