Java居然不支持这些表达式语句!? 比如这样:3 + 6; i > 5 ? i = 5 : i = 9.... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写成这样i = i > 5 ?5:9 i > 5 ? i = 5 : i = 9;改成i > 5 ? i = 5 : (i = 9);就OK了 int i = xxx; i = i > 5 ? 5 :9; 规则而已。。 我学过c,c中表达式分两种:有副作用的和无副作用的,不管是哪一种在其后面加上“;”就构成了语句。尽管无副作用的表达式语句做为单独的一条语句没意义,比如:“3+6;”,但是c/c++编译器可以接受,java编译器却无法接受。我想知道这不能接受的原因,是出于什么样的考虑。同样的这一条语句“i > 5 ? i = 5 : i = 9;”在c/c++中是能通过编译的,java中依然不行,这是为什么?? 因为JAVA不是C...这就没必要多讨论了你会跑到美国去说,为什么你们不收人民币啊,我在天朝就收的?用JAVA,当然是遵守JAVA的编码规则了... 这不一样吧!既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。 刚才回复错了。这不一样吧!既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。 在C中,a=b 是个表达式,好象叫赋值表达式,而在JAVA中,这是个语句。所以,在C中,写 if (a=b) 最多警告你一下,而在JAVA中是不能通过编译的。正因为C中有这种东西,所以,在C中你可以写 a=b=c=d;java 里面是没有的。同样道理,i > 5 ? i = 5 : i = 9;这个在C中,i=5,i=9都被看作表达式,而在java中是没有赋值表达式这样嘀东东。所以是不合语法。 "if (a=b) 最多警告你一下,而在JAVA中是不能通过编译的。"如果a和b都不是boolean类型的话,java中无法编译通过,这是因为java不支持对布尔类型的隐式转换,只所以这样是为了避免因误写带来的逻辑错误。如果a和b都是布尔类型是没问题的。a = b是表达式,产生值,所以可以当成右值,不管是在java还是c中都可以c = a = b; 纠正一下:i > 5 ? i = 5 : i = 9; 关于这条语句,我想表达的意思是这样:i > 5 ? (i = 5) : (i = 9);或是直接这样: i > 5 ? 5 : 9; 我总结一下吧:不管是3 + 6; 还是i > 5 ? (i = 5) : (i = 9和i > 5 ? 5 : 9;它们都有某些共同的得点,即求值过程的最后一步都是非右值运算符产生的。所以我得到结论:java支持的表达式语句是c的子集,其中不支持的表达式集合为:{求值过程的最后一步是非右值运算符产生的表达式。}可能总结的不对,欢迎大家指正。 我想我得到答案了。就在刚才我写代码的时候,写了这样一段:if(in == current) current == null;很明显我想表达的逻辑是这样:if(in == current) current = null;如果在c中我在成坨的代码中发现这么一个小问题,可想而知是很费神的,java因为不支持这样的语句,所有编译器帮我找出了错误。我好像听到了java语言的设计者这样说:嗨,哥们,很明显你不知道自己在做什么,你是很容易犯错误的,所有让我来帮你找出错误吧。 List<Short> l=new ArrayList<Short>(); 怎么根据XML动态生成类 java中interface的奇怪声明 JAVA的匿名事件 关于一个实例方法调用同类的另一个实例方法 java.sql. next() rtp协议在这里如何应用?做过的都进来看看 [16]关于Map的简单调试问题,大家快来帮忙学习呀! 向高手们问个简单的问题? 我要转向JAVA了但我觉得除了跨平台,真的找不到JAVA的什么比VC好!给我点动力吧! 一款用javascript实现的轻量级模态框解决方案TinyBox 的问题 请教如何统计快速排序选择了多少次基准值(pivot)?
写成这样i = i > 5 ?5:9
i = i > 5 ? 5 :9;
规则而已。。
同样的这一条语句“i > 5 ? i = 5 : i = 9;”在c/c++中是能通过编译的,java中依然不行,这是为什么??
你会跑到美国去说,为什么你们不收人民币啊,我在天朝就收的?用JAVA,当然是遵守JAVA的编码规则了...
这不一样吧!
既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。
既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。
a=b=c=d;
java 里面是没有的。同样道理,i > 5 ? i = 5 : i = 9;
这个在C中,i=5,i=9都被看作表达式,而在java中是没有赋值表达式这样嘀东东。所以是不合语法。
如果a和b都不是boolean类型的话,java中无法编译通过,这是因为java不支持对布尔类型的隐式转换,只所以这样是为了避免因误写带来的逻辑错误。如果a和b都是布尔类型是没问题的。
a = b是表达式,产生值,所以可以当成右值,不管是在java还是c中都可以c = a = b;
i > 5 ? i = 5 : i = 9; 关于这条语句,我想表达的意思是这样:
i > 5 ? (i = 5) : (i = 9);
或是直接这样: i > 5 ? 5 : 9;
不管是3 + 6; 还是i > 5 ? (i = 5) : (i = 9和i > 5 ? 5 : 9;
它们都有某些共同的得点,即求值过程的最后一步都是非右值运算符产生的。
所以我得到结论:java支持的表达式语句是c的子集,其中不支持的表达式集合为:{求值过程的最后一步是非右值运算符产生的表达式。}可能总结的不对,欢迎大家指正。
if(in == current)
current == null;
很明显我想表达的逻辑是这样:
if(in == current)
current = null;
如果在c中我在成坨的代码中发现这么一个小问题,可想而知是很费神的,java因为不支持这样的语句,所有编译器帮我找出了错误。
我好像听到了java语言的设计者这样说:嗨,哥们,很明显你不知道自己在做什么,你是很容易犯错误的,所有让我来帮你找出错误吧。