mig*_*WOZ 2 java ternary-operator
我已经搜索了这个问题,并且对于同样的问题存在一些问题,但这些问题的答案似乎都没有解决我的问题.
我已经查看了规范,并设法找到以下几点:
第一个表达式到三元必须是boolean类型
第二个和第三个表达式无法调用void方法.
如果我写下面的代码,请给出上述信息
String res;
System.out.println(res="walter");
Run Code Online (Sandbox Code Playgroud)
它将walter打印到控制台,这意味着表达式返回了一些东西,因此它不是空的.但现在如果试着写这个
String stuff = "TV";
String res=null;
stuff.equals ("TV") ? res= "Walter" : res = "White" ;
Run Code Online (Sandbox Code Playgroud)
此代码无法编译 .赋值的左侧必须是变量
即使满足上述两个条件(据我所知).代码为什么不编译以及为什么它需要左边的变量?
而且如果我这样做的话
res = stuff.equals("TV")?res="WALTER":res="WHITE";
Run Code Online (Sandbox Code Playgroud)
代码无法编译
对于参数类型java.lang.String,java.lang.String,运算符<=未定义
但是以下编译好了
res = stuff.equals("TV")?res="WALTER":"WHITE";
Run Code Online (Sandbox Code Playgroud)
PS
条件运算符是一个表达式:它有一个结果:
int a = cond ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
但你不能这样使用它:
cond ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
因为它不是StatementExpression; 这与你不能写任何一个事实相同:
1;
2 * 3;
array[1];
Run Code Online (Sandbox Code Playgroud)
因为他们只是没有任何目的.
A StatementExpression是一个表达式,您可以弹出一个表达式,;例如:
int i = 0;
someMethod(i++); // Use of i++ as an expression.
i++; // Use of i++ as a StatementExpression.
Run Code Online (Sandbox Code Playgroud)
完整的StatementExpressions 列表可以在语言规范中找到:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
Run Code Online (Sandbox Code Playgroud)
因此,您不必具有赋值:您可以以人为的方式使用条件运算符,例如:
(true ? new int[1] : null)[0]++;
Run Code Online (Sandbox Code Playgroud)
(并不是说我以任何方式提倡这是好的代码,或者以任何方式有用;只是指出它是合法的)
至于其他问题:这些只是特定于编译器实现的消息.你的编译器绊倒了无效的语法,并尽力帮助你,但它并没有做得特别好.
请注意,其他编译器(例如Ideone使用的编译器)会给出完全不同的消息.
第一个表单应使用if/else编写:
if (stuff.equals ("TV")) res= "Walter" else res = "White" ;
Run Code Online (Sandbox Code Playgroud)
(if顺便说一句)
第二个是缺少一些括号:
res = stuff.equals("TV")?(res="WALTER"):(res="WHITE");
Run Code Online (Sandbox Code Playgroud)
虽然第二和第三个操作数中的赋值仍然是多余的:
res = stuff.equals("TV")?"WALTER":"WHITE";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |