从int到short可能的有损转换
我已经定义了数组gx,数组arr为短型。但是为什么左边的运算可能会以int类型结束,而我必须将其转换为short?编译器错误可能是从int到short的有损转换。
这是我的代码。
public PixImage sobelEdges() {short gy=0;
for(int x=1;x<width-1;x++){
for(int y=1;y<height-1;y++){
// if(x=){
for(int z=0;z<3;z++){
gx[x][y][z]=arr[x-1][y-1][z]-arr[x+1][y-1][z]+2*arr[x-1][y][z]-2*arr[x+1][y][z]+arr[x-1][y+1][z]-arr[x+1][y+1][z];
}
// }
}
}
return this;
// Don't forget to use the method mag2gray() above to convert energies to
// pixel intensities.
}
那是因为所谓的拆箱吗?因此,这意味着我每次进行手术时都需要进行投射吗?
回答:
它不是开箱;这是“二进制数值提升”。
JLS的第5.6.2节规定:
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示一个可转换为数字类型的值,以下规则适用:
如果任何操作数是引用类型,则将其进行拆箱转换(第5.1.8节)。
扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:
如果一个操作数的类型为double,则另一个将转换为double。
否则,如果其中一个操作数的类型为float,则另一个将转换为float。
否则,如果其中一个操作数的类型为long,则另一个将转换为long。
。
和
二进制数值提升是对某些运算符的操作数执行的:
乘法运算符*,/和%(第15.17节)
数值类型+和-的加法和减法运算符(第15.18.2节)
数值比较运算符<,<=,>和> =(§15.20.1)
数值相等运算符==和!=(§15.21.1)
整数按位运算符&,^和| (第15.22.1节)
在某些情况下,条件运算符?:(§15.25)
(强调我的)
当这些值相加/相乘时,它们将被提升为int
数学运算之前的值。最后,可以short
在分配回数组之前先回退到。
gx[x][y][z] = (short) (arr[x-1][y-1][z]-arr[x+1][y-1][z]+2*arr[x-1][y][z] -2*arr[x+1][y][z]+arr[x-1][y+1][z]-arr[x+1][y+1][z]);
每次使用小于的原始数据类型进行操作时int
(例如在short
示例中),您都需要将其回退。
以上是 从int到short可能的有损转换 的全部内容, 来源链接: utcz.com/qa/426057.html