A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2013-6-17 21:58  /  2051 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于条件表达式和表达式,怎么定义的,这两个的区别是什么呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
运算符及操作元连接起来的符合java规则的式子称之为表达式 eg:
int x=4;int y=3;
int result=x+y;
条件表达式顾名思义就是由条件运算符构成eg:
(x-y>0)?  True: false;

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
条件表达式由条件运算符构成,并常用条件表达式构成一个赋值语句,其一般形式如下:
x=<表达式1>?<表达式2>:<表达式3>
其意义是:先求解表达式1,若为非0(真),则求解表达式2

条件表达式,只是表达式中的一种

Java表达式是变量、常量、运算符、方法调用的序列,它执行指定的计算并返回某个确定的值。
其中,运算符按操作数的数目:有一元运算符(++、--)、二元运算符(+、-、>等等)和三元运算符(?:),它们分别对应一到三个操作数。
表达式一般按运算符来分:
算术表达式(float x=8.3f、i++)、
关系表达式(3>7、3<7)、
布尔逻辑表达式((5>4)&&true、!false)、
位运算表达式(a=34^3)、
赋值表达式、
条件表达式(b=100>89?a=ture:a=false)
以及复合表达式。
还有一种叫“表达式语句”,就是在表达式后加上分号作为语句来使用。(int i=123;)

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
条件表达式指的就是三元运算,表达式包含条件表达式

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
表达式是个大的概念,条件表达式也属于表达式,只不过是经过条件修饰的
回复 使用道具 举报
转: http://apps.hi.baidu.com/share/detail/5319426



下面的程序将会打印出什么呢?

public class DosEquis{

        public static void main(String[] args){

               char x = 'X';

               int i = 0;

               System.out.println(true ? x : 0);

               System.out.println(false ? i : x);

        }

}





这个程序由两个变量声明和两个print语句构成。第一个print语句计算条件表达式(true ? x : 0)并打印出结果,这个结果是char类型变量x的值’X’。而第二个print语句计算表达式(false ? i : x)并打印出结果,这个结果还是依旧是’X’的x,因此这个程序应该打印XX。





然而,如果你运行该程序,你就会发现它打印出来的是X88。这种行为看起来挺怪的。第一个print语句打印的是X,而第二个打印的却是88。它们的不同行为说明了什么呢?





答案就在规范有关条件表达式部分的一个阴暗的角落里。请注意在这两个表达式中,每一个表达式的第二个和第三个操作数的类型都不相同:x是char类型的,而0和i都是int类型的。混合类型的计算会引起混乱,而这一点比在条件表达式中比在其它任何地方都表现得更明显。你可能考虑过,这个程序中两个条件表达式的结果类型是相同的,就像它们的操作数类型是相同的一样,尽管操作数的顺序颠倒了一下,但是实际情况并非如此。

确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核心就是一下三点:

如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
2、3两点是关键。在程序的两个条件表达式中,一个操作数的类型是char,另一个的类型是int。在两个表达式中,int操作数都是0,它可以被表示成一个char。然而,只有第一个表达式中的int操作数是常量(0),而第二个表达式中的int操作数是变量(i)。因此,第2点被应用到了第一个表达式上,它返回的类型是char,而第3点被应用到了第二个表达式上,其返回的类型是对int和char运用了二进制数字提升之后的类型,即int。





条件表达式的类型将确定哪一个重载的print方法将被调用。对第一个表达式来说,print(char)将被调用,而对第二个表达式来说,PrintStream.print(int)将被调用。前一个重载方法将变量x的值作为Unicode字符(X)来打印,而后一个重载方法将其作为一个十进制整数(88)来打印。





总之,通常最好是在条件表达式中使用类型相同的第二和第三操作数。否则,你和你的程序的读者必须要彻底理解这些表达式行为的复杂规范。





对 语言设计者来说,也许可以设计一个牺牲掉了部分灵活性,但是增加了简洁性的条件操作符。例如,要求第二和第三操作数必须就有相同的类型,这看起来就很合 理。或者,条件操作符可以被定义为对常量没有任何特殊处理。为了让这些选择对程序员来说更加容易接受,可以提供用来表示所有原始类型字面常量的语法。这也 许确实是一个好注意,因为它增加了语言的一致性和完备性,同时又减少了对转型需求。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
月时微 发表于 2013-6-18 12:51
转: http://apps.hi.baidu.com/share/detail/5319426


答得非常详细继续努力
回复 使用道具 举报
张承富 发表于 2013-6-17 23:36
条件表达式由条件运算符构成,并常用条件表达式构成一个赋值语句,其一般形式如下:
x=?:
其意义是:先求解 ...

答得非常详细继续努力
回复 使用道具 举报
加油楼主   祝你早点入学
回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马