考虑以下
public byte GetAByte()
{
return (byte)(_globalByte % 13);
}
Run Code Online (Sandbox Code Playgroud)
请注意,以下内容不起作用并引发错误.
return (_globalByte % (byte)13);
Run Code Online (Sandbox Code Playgroud)
这里mod运算符返回一个整数,需要将其转换回一个字节以使return语句起作用.如果我错了,请纠正我,但我猜测_globalByte在计算模数之前被转换为整数.总的来说,这意味着2次铸造操作.
所以我的问题是为什么基本运算符每次都必须返回一个整数?这是一个特定于java的怪癖,还是以这种方式做到这一点有一些重要性?
所以我的问题是为什么基本运算符每次都必须返回一个整数?这是一个特定于java的怪癖,还是以这种方式做到这一点有一些重要性?
它发生的原因是Java积分算术运算符被定义为int op int -> int(或long op long -> long).
为什么他们这样定义?我不确定,但我可以想到三种可能的解释:
IMO,后者可能是最重要的.
假设+签名过载byte op byte -> byte.现在我们的情况+不再是关联的.假设我们有byte b1, b2; int i;那么
(b1 + b2) + i第一个+使用byte运算符,然后第二个+使用int运算符.
b1 + (b2 + i)第二个+使用int运算符,然后第一个+使用int运算符.
请注意,如果逐字节b1 + b2溢出,评估复合表达式的两种不同方法将给出不同的答案.
但是,自动将操作数扩展到int并执行操作int op int -> int可以避免这种情况.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |