本帖最后由 李国荧 于 2014-8-8 13:17 编辑
代码如下:
- public class ThreeOperators{
- public static void main(String[] args){
- int a = 1, b = 10;
- int temp1 = 0 < 1 ? a++ : b++;
- System.out.println("a = " + a + ", b = " + b);//a = 2, b = 10
- System.out.println("temp1 = " + temp1);//temp1 = 1
-
- int c = 1, d = 10;
- //下面一行代码有问题
- //int temp2 = 0 < 1 ? c = c + 1 : d = d + 1;
- //下面一行代码正确
- int temp2 = 0 < 1 ? c = c + 1 : d + 1;
- System.out.println("c = " + c + ", d = " + d);//c = 2, d = 10
- System.out.println("temp2 = " + temp2);//temp2 = 2
- }
- }
复制代码
问题代码会(即第10行被注释掉的代码)出现如下编译错误:
ThreeOperators.java:10: error: unexpected type
int temp2 = 0 < 1 ? c = c + 1 : d = d + 1;
^
required: variable
found: value
1 error
expression1 ? expression2 : expression3
三目运算符是有返回值的,如果expression1的值为true,则返回expression2表达式的值,否则返回expression3表达式的值。
赋值运算符(=)也是有返回值的,赋值表达式的值为赋值运算符(=)右边的表达式的值。
比如:c = c + 1;表达式的值是c+1的值。
1、既然赋值运算符(=)也是有返回值的,那为什么赋值表达式不能出现在expression3的位置呢??
2、为什么赋值表达式可以出现在expression2的位置,却不能出现在expression3的位置呢??
结贴,答案参见2楼。
感谢2楼的解答。
|
|