C#Array.Copy的Java等价物
以下代码在C#中工作:C#Array.Copy的Java等价物,java,arrays,type-conversion,Java,Arrays,Type Conversion,以下代码在C#中工作: public void DoSomething(float[][]数组){ for(int i=0;i
public void DoSomething(float[][]数组){
for(int i=0;i
我正在尝试将其转换为Java。我试过这个:
public void DoSomething(float[][] array){
for (int i = 0; i < array[0].length; i++)
{
int len = array[0].length;
double[] copy = new double[len];
copy = Arrays.copyOf(array[i], len);
...
}
}
public void DoSomething(float[][]数组){
对于(int i=0;i
但我得到了错误信息:
类型不匹配:无法从float[]转换为double[]
如何使其在Java中工作?您正在尝试将
float
数组分配给double
数组。试试这个:
public void DoSomething(float[][] array) {
for (int i = 0; i < array[0].length; i++) {
int len = array[0].length;
float[] copy = new float[len]; // note change of array type
copy = Arrays.copyOf(array[i], len);
public void DoSomething(float[][]数组){
对于(int i=0;i
我不能代表C#,但java是一种强类型语言,这意味着你不能做你试图做的事情。在java中,
float
可以转换为double
,float[]
可以不转换为double[]
您正在尝试将一个浮点数组
分配给一个双精度
数组。请尝试以下操作:
public void DoSomething(float[][] array) {
for (int i = 0; i < array[0].length; i++) {
int len = array[0].length;
float[] copy = new float[len]; // note change of array type
copy = Arrays.copyOf(array[i], len);
public void DoSomething(float[][]数组){
对于(int i=0;i
我不能代表C#,但java是一种强类型语言,这意味着你不能做你所尝试的事情。在java中,float
可以转换为double
,float[]
可以不转换为double[]
使用
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
方法将数组的整个部分复制到其他数组中。(使用
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
方法将数组的整个部分复制到另一个数组中。(,因为在Java中,double和float不是同一件事,具有不同的精度。(请参阅:)
编辑以添加:至于如何使其工作,您需要手动将每个元素强制转换为
double
。但是,您可能在精度方面存在问题;请参阅:,因为在Java中,double
和float
不是同一件事,具有不同的精度。(请参阅:)
编辑以添加:至于如何使其工作,您需要手动将每个元素强制转换为
double
。但是,您可能在精度方面存在问题;请参阅:该方法将编译,但不会运行。从您链接到的JavaDoc中可以看到:“引发ArrayStoreException…[如果]src参数和dest参数引用的数组的组件类型是不同的基元类型。”这忽略了这样一个事实,即如果它确实运行了,那么由于精度的差异,你是在自找麻烦。@BrianRoach好吧,原则上他们可以检查这一点,并将其转化为一个标准for循环,在这个循环中,他们通过通常的规则将浮点值提升到双精度值。但这会破坏使用本机的全部目的,基本上只是memcpy的超快方法。该方法将编译,但不会运行。从您链接到的JavaDoc:“将引发ArrayStoreException…[如果]src参数和dest参数引用的数组的组件类型是不同的基元类型。”这忽略了这样一个事实,即如果它确实运行了,那么由于精度的差异,你是在自找麻烦。@BrianRoach好吧,原则上他们可以检查这一点,并将其转化为一个标准for循环,在这个循环中,他们通过通常的规则将浮点值提升到双精度值。但这会破坏使用本机的全部目的,基本上只是memcpy的超快方法。我的部分问题是为什么C#允许它。我猜它隐式地强制转换数组。是这样吗?有没有在Java中强制转换/转换的方法?float[]不能强制转换为double[]@adam0101-我不是C#的家伙,我必须查一下。正如我提到的,你可以在java中将float
转换为double
,但是结果值可能不是你想要的。你尝试使用的函数不会为你做这些,你必须自己编写循环并进行转换。数组本身不能只是转换。部分我的问题是为什么C#允许它。我猜它隐式地强制转换数组。是这样吗?在Java中有没有强制转换/转换的方法?float[]不能强制转换为double[]@adam0101-我不是C#人,我必须查一下。正如我提到的,你可以在java中将float
转换为double
,但结果值可能不是你想要的。你尝试使用的函数不会为你做这些,你必须自己编写循环并进行转换。数组本身不能被转换。defne“产生不同的结果”。具体不同于什么?请注意,它也不是在C#中强制转换。它是一种转换。从.NET:“类型兼容性定义如下:[…]如果从源类型复制到目标类型是一种扩展转换,则两个内在(预定义)值类型是兼容的。[…]有关转换的更多信息,请参阅“定义”以产生不同的结果。具体不同于什么?请注意,它也不是在C#中强制转换。它是一种转换。从.NET中可以看出:“类型兼容性定义如下:[…]两个内在的(预定义的)如果从源类型复制到目标类型是扩大转换,则值类型是兼容的。[…]有关转换的详细信息,请参阅“