Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
C#Array.Copy的Java等价物_Java_Arrays_Type Conversion - Fatal编程技术网

C#Array.Copy的Java等价物

C#Array.Copy的Java等价物,java,arrays,type-conversion,Java,Arrays,Type Conversion,以下代码在C#中工作: public void DoSomething(float[][]数组){ for(int i=0;i

以下代码在C#中工作:

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中可以看出:“类型兼容性定义如下:[…]两个内在的(预定义的)如果从源类型复制到目标类型是扩大转换,则值类型是兼容的。[…]有关转换的详细信息,请参阅“