为什么【三元运算符】不能独立成句,有返回值的方法却可以独立成句?

bigbro001 2009-08-27 10:42:53
如下代码编译时会提示错误:

public class Test1
{
public static void main(String[] args)
{
int x = Integer.parseInt(args[0]);
x == 5 ? "yes" : "no";
}
}

错误是:
(x == 5) ? "yes" : "no";
^ not a statement

如果将以上代码改成:

public class Test1
{
public static void main(String[] args)
{
int x = Integer.parseInt(args[0]);
String s = x == 5 ? "yes" : "no";
}
}

则解除了问题

那么以此类推,有返回值的方法,应该也不能够独立成句
可事实上并非这样,以下代码成功编译并运行,为什么会这样呢???

public class Test2
{
public static double method()
{
return 10;
}

public static void main(String[] args)
{
method();
}
}
...全文
1104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxzhy 2009-08-28
  • 打赏
  • 举报
回复
楼主: 这个可以有!

太阳: 这个真没有!
公子骏 2009-08-28
  • 打赏
  • 举报
回复
表达式是嵌入在语句里的,
比如说三元运算符和赋值语句

int a =1;
int b = (a>0) ? 1 : 0;
hxbot 2009-08-28
  • 打赏
  • 举报
回复
public class Test1
{
public static void main(String[] args)
{
int x = Integer.parseInt(args[0]);
x == 5 ? System.out.println("true") : System.out.println("true");
}
}


这算不算句子?

如果算的话,那么很可惜的告诉你:“不是语句”
我也不是很明白Java中的三目运算符,前些天还碰过到呢。
公子骏 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wtk870424 的回复:]
引用 1 楼 mysinglelive 的回复:
三元运算符是表达式不是语句,就像a+b不能独立成句一样。



我靠,这都行??
a = 1也是表达式啊,赋值表达式

a = 1;怎么也可以成为句子

至于三元表达式为什么不能成为句子,我就不知道了。
[/Quote]

什么叫赋值语句?没听说赋值表达式吧。

<assignmentStatemet> ::= <left> <assignOp> <right>
<left> ::= <Identifier>
<assignOp> ::= += | -= | *= | /= | %= | =
<right> ::= <Expression>

表达式往往嵌入在语句中
如if语句,if ( [表达式] ) [语句]
赋值语句, [变量名] [赋值操作符] [表达式]

三元操作符也是表达式之一,
语句里没有三元语句的定义







aywrenyue 2009-08-28
  • 打赏
  • 举报
回复
表达式而非完整语句
seaoctopus 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bigbro001 的回复:]
标准解答是:
你是想写一个表达式语句,你认为:(x == 5) ? "yes" : "no" 是一个表达式,则加上;后就成为一个语句了?
这个在C/C++中正确的,在JAVA中对表达式有特定的要求.即:  表达式E;
要形成一个表达式语句,则表达式E必须只能是:
1)赋值表达式,
2)自增++表达式,
3)自减--表达式,
4)方法调用表达式,
5)new 表达式.
[/Quote]

确实对。
公子骏 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bigbro001 的回复:]
标准解答是:
你是想写一个表达式语句,你认为:(x == 5) ? "yes" : "no" 是一个表达式,则加上;后就成为一个语句了?
这个在C/C++中正确的,在JAVA中对表达式有特定的要求.即:  表达式E;
要形成一个表达式语句,则表达式E必须只能是:
1)赋值表达式,
2)自增++表达式,
3)自减--表达式,
4)方法调用表达式,
5)new 表达式.
[/Quote]

正解
bigbro001 2009-08-28
  • 打赏
  • 举报
回复
标准解答是:
你是想写一个表达式语句,你认为:(x == 5) ? "yes" : "no" 是一个表达式,则加上;后就成为一个语句了?
这个在C/C++中正确的,在JAVA中对表达式有特定的要求.即: 表达式E;
要形成一个表达式语句,则表达式E必须只能是:
1)赋值表达式,
2)自增++表达式,
3)自减--表达式,
4)方法调用表达式,
5)new 表达式.
WTK870424 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mysinglelive 的回复:]
三元运算符是表达式不是语句,就像a+b不能独立成句一样。

[/Quote]

我靠,这都行??
a = 1也是表达式啊,赋值表达式

a = 1;怎么也可以成为句子

至于三元表达式为什么不能成为句子,我就不知道了。
pywepe 2009-08-27
  • 打赏
  • 举报
回复
请问楼主
你这样做有什么意义?

没有意义!
那就不成立
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
学习了。
fiwiner 2009-08-27
  • 打赏
  • 举报
回复
楼上说得对
x == 5 ? "yes" : "no";相当于:
if(x == 5){
"yes";
}else{
"no";
}
"yes";和"no";算句子吗?
method();这才是个正常的句子,返回值可以再内存中废弃
公子骏 2009-08-27
  • 打赏
  • 举报
回复
三元运算符是表达式不是语句,就像a+b不能独立成句一样。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧