【发布时间】:2021-10-14 12:07:45
【问题描述】:
我正在学习 Java,并且正在尝试使用一元运算符 --expr、expr-- 和 -expr。
在课堂上,有人告诉我--3 应该评估为 3。我想在以下作业中测试这个概念:
jshell> int t = 10;
t ==> 10
| created variable t : int
jshell> int g = -3;
g ==> -3
| created variable g : int
jshell>
jshell> int d = --3;
| Error:
| unexpected type
| required: variable
| found: value
| int d = --3;
| ^
jshell> int d = --t;
d ==> 9
| created variable d : int
jshell> int f = d---t;
f ==> 0
| created variable f : int
jshell> int f = 1---t;
| Error:
| unexpected type
| required: variable
| found: value
| int f = 1---t;
| ^
| update overwrote variable f : int
我的问题:
- 为什么分配 -3 有效,而--3 无效?我以为 --3 会给出 3。
- 在某些情况下 --expr 可以被评估为双重否定而不是递减?
- 为什么在引发意外类型错误的地方值不够用?
- Java 如何评估 d---t?另外,按什么顺序?
对于问题 4,我的想法是从右到左的评估。因此,如果 d = 9 且 t 为 9,则最右边的 - 运算符首先作用于 t,使其值为 -9。然后第二个 - 相同,所以 t 的值再次变为 9。然后我认为编译器会注意到 d 在最左边的运算符旁边并减去这些值。这将是 9-9,其计算结果为 0。Jshell 显示的表达式也计算为 0,但我想确保我的推理是正确的或可以改进。
【问题讨论】:
-
你认为答案是什么?你不明白解释它们的具体哪些部分?
-
你的意思是 decrement 而不是 deprecation?
-
您不能将递减/递增运算符(即
--/++)与数字文字一起使用。他们期望一个变量,因为他们重新分配了该变量。 -
tgdavies 和 chrylis-cautiouslyoptimisticI,谢谢您的反馈!我再次编辑了我的帖子。如果需要进一步改进,请告诉我。
-
哦,好吧。我在 Jshell 中尝试了更多,发现它确实重新分配了变量。感谢您指出这一点@Slaw。
标签: java unary-operator jshell