Java 为什么此代码的编译会失败?

Java 为什么此代码的编译会失败?,java,Java,另一个SCJP问题。我认为输出是K=7,但这本书的答案是“编译失败”。我只是觉得代码没有任何问题 1. class RevQOne{ 2. public static void main(String [] args) { 3. boolean i = true; 4. boolean j = false; 5. short k = 10; 6. if((k == 10) && (j = true))k--; 7. if((i = fals

另一个SCJP问题。我认为输出是K=7,但这本书的答案是“编译失败”。我只是觉得代码没有任何问题

1. class RevQOne{
2.   public static void main(String [] args) {
3.     boolean i = true;
4.     boolean j = false;
5.     short k = 10;
6.    if((k == 10) && (j = true))k--;
7.    if((i = false) || ( k == 9)) 
8.        k--;
9.        k--;
10.     System.out.println("k=" + k);
11.   }
12. }

PS:第6行和第7行中的傻=符号以及第7行中缺少大括号的if都是故意的。我想,这个问题是为了测试我对这些东西在被滥用时的行为的了解。

你完全正确。它确实可以编译(前面的答案是错误的),尽管赋值很粗略,这就是输出。

是的,在我看来很好。它在一个正确命名的文件中吗?

好的,编译它。输出确实是k=7。安妮塔:1,书:0。谢谢大家

你试过自己编译吗?(提示,看看比较“j”和“true”的布尔逻辑)Asker没有比较它们,j被赋值为true,这将返回true所有这些边上的数字(
1.
2.
,等等)将完全混淆编译器!:-)它不需要有特定的名称,因为类不是公共的。赋值为值对于任何类型都是合法的。您只需要将
的整体条件设置为
布尔值
@dan,您是对的。我想说的是,您只能使用布尔赋值直接作为条件的值,例如,
if(a=true)
,但我的措辞很糟糕,代码实际上并没有这样做。这些SCJP书籍给出错误答案的情况并不少见。如果有最新的勘误表,一定要在书的网站上查阅。这(以及其他错误)可能已经被确认。