【发布时间】:2015-04-11 12:44:44
【问题描述】:
int i = 0;
long ll = 0L;
i = -1 - 2; // -3
i = (int) -1 - 2; // -3
ll = (long) - (int) -1 - 2;// -1
i = (int) +(long) -(int) -1 - 2;//-1
ll = (long) +(int) -1 - 2; // -3
在上面的程序中一行
ll = (long) - (int) -1-2;
ll 的值为-1。仅通过类型转换,它的值如何变为-1?它不应该像 3 或 -3 吗?
【问题讨论】:
-
您格式化示例和输出的方式非常混乱。虽然有点难读,但此类信息的最佳来源是“Java 语言规范”。从长远来看,首先查看该文档,确定相应的部分......并弄清楚发生了什么是非常有帮助的。
-
你能分享你的研究吗?语言规范的哪一部分让您特别困惑?
-
见this。一元减号在您的运算符中具有最高优先级,然后是强制转换运算符,然后是加法。
((long) (-((int) -(1)))) - 2。所以你将-1转换为int,然后应用一元减号以生成1,然后将1转换为long,然后减去2。在某些地方放置空格以希望降低这些操作的优先级并没有真正起作用。 -
ll = (long) + (int) -1 - 2;// -1将显示 -3 而不是 -1 -
@prashant 我已经编辑了问题中的行。
标签: java integer long-integer