看看这两道题的运行结果,原因是?
2)以下程序的运行结果为:
1. public class Conditional {
2. public static void main(String args [] ) {
3. int x = 4;
4. System.out.println( "value is " +((x >4) ? 99.99 : 9));
5. }
6. }
A. 输出:value is 99.99
B. 输出: value is 9
C. 输出: value is 9.0
D. 在第4 行出现编译错误
4) 以下程序的输出结果为:
public class test {
public static void main(String args[]) {
int x=1,y=1,z=1;
if (x--==1&&y++==1||z++==1)
System.out.println("x="+x+",y="+y+",z="+z);
}
}
A. x=0,y=2,z=1
B. x=1,y=2,z=1
C. x=0,y=1,z=1
D. x=0,y=2,z=2
2)以下程序的运行结果为:
1. public class Conditional {
2. public static void main(String args [] ) {
3. int x = 4;
4. System.out.println( "value is " +((x >4) ? 99.99 : 9));
5. }
6. }
A. 输出:value is 99.99
B. 输出: value is 9
C. 输出: value is 9.0
D. 在第4 行出现编译错误
4) 以下程序的输出结果为:
public class test {
public static void main(String args[]) {
int x=1,y=1,z=1;
if (x--==1&&y++==1||z++==1)
System.out.println("x="+x+",y="+y+",z="+z);
}
}
A. x=0,y=2,z=1
B. x=1,y=2,z=1
C. x=0,y=1,z=1
D. x=0,y=2,z=2
THE OTHER ONE IS :A
第二道题中, 关键在 && 和 || 两个关系运算符的特点, 它们分别是“短路与”、“短路或”。“&&”时表示“&&”之前的表达式结果为true时仍要比较“&&”后面的表达式,只有都为true时,整个条件才为true。 而“||”而不一样,如果“||”之前的表达式结果为true时,就不会再计算“||”后在表达式而视整个条件为true,如果“||”前的的表达结果为false,才会继续计算“||”后面的表达式。所以上面题中x--和y++都会被执行,而z++则不会被执行,所以结果为x=0,y=2,z=1
如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类
来源是http://hi.baidu.com/lumber/blog/item/16504fcd742d8d550eb34536.html
看一下就清楚了至于第二个,是一种优化的算法x--==1&&y++==1||z++==1这一行了,当执行完x--==1&&y++==1之后,结果就是true了,后面的不执行.....
如果要让他执行好像是是用x--==1&y++==1|z++==1,这样的算法就是没有经过优化的.....
我也刚学....借鉴一下,哈哈
原因:首先(x >4) ? 99.99 : 9 ,根据不同基本数据类型的数值同时进行运算时的转换原则,9的类型将自动转换为double型,即9.0 ;
然后,(x >4) 为false,所以输出9.0第二个题目的答案是:A. x=0,y=2,z=1
原因:首先(x--==1&&y++==1||z++==1) ,因为&&的优先级高于||,所以括号里面的真假判断是这样的:如果||前面的x--==1&&y++==1这个部分为真,
那么后面的z++==1不管是真是假,都将不会被执行;
其次是x--==1,这个对基础知识的要求比较高,其实x--==1这句首先是判断x==1,然后再x--,后面的y++==1以及z++==1也是同样的道理,
因此,(x--==1&&y++==1||z++==1)是(true&&true||true) ,
所以,根据上面所说的,z++==1其中z++将不会被执行 ,
综上,x=0,y=2,z=1