首页 > 编程语言 > 详细

关于Java和PHP中三目运算符的优先级问题

时间:2015-11-22 20:12:23      阅读:286      评论:0      收藏:0      [点我收藏+]

背景:

重新翻看PHP的手册,看看基础的东西,看到运算符的优先级问题的时候,碰到了这样的一串代码:

$a = 2;
echo ( 
    $a == 1 ? ‘one‘ : 
    $a == 2 ? ‘two‘ : 
    $a == 3 ? ‘three‘ :
    $a == 4 ? ‘four‘ : ‘other‘); 
echo "\n"; 
// 输出结果为:four

一时之间想的不是很明白,写了相类似的Java代码

public class Test {
    public static void main() {
        int a = 2;
        System.out.print( a == 1 ? ‘我‘  :  a == 2 ? ‘你‘ : ‘它‘);
    }
}
// 输出结果为:‘你‘;

花了一段时间弄明白了,但是不知道如何用语言清晰的表达出来,特此记录了一下!(如有错误,还请指正学习~)

解决:

先来看,如果用括号()忽略优先级问题

echo ( 
    $a == 1 ? ‘one‘ : 
    ($a == 2 ? ‘two‘ : 
    ($a == 3 ? ‘three‘ :
    ($a == 4 ? ‘four‘ : ‘other‘)))
);
// 加了()之后,在PHP中等同于
if ($a == 4) {
	echo ‘four‘;
}else if ($a == 3) {
	echo ‘three‘;
}else if ($a == 2) {
	echo ‘two‘;
}else if ($a == 1) {
	echo ‘one‘;
}else{
	echo ‘other‘;
}
// 输出都是 two

在来看,如果不使用()括号

Java.code

public calss Test {
	public static void main(String[] args) {
		int a = 2;
		System.out.println( a == 2 ? ‘我‘ : true ? ‘你‘ : ‘它‘);
	}
}
// ==>以上结果输出‘我‘;这个等同于:
if (a == 2) {
	System.out.println(‘我‘);
}else {
	if( true ){
		System.out.println(‘你‘);
	}esle {
		System.out.println(‘它‘);
	}
}
// ==>从此可以看出,在Java的三元运算符中 ? 是比 : 要优先的

php.code

$a = 2;
echo $a == 2 ? ‘我‘ : $a==1 ? ‘你‘ : ‘它‘;
// ==>以上输出的结果是:‘你‘;等同于:
if ($a == 2 ? TURE: FALSE){
	echo ‘你‘;
}else {
	echo ‘它‘;
}

从以上的结果,分析得出初步的结论(是否真的正确,不知道):

1.从代码转换为分支结构来看:

Java中解析扫描是从左到右的,而在PHP中扫描是从右到左的!即,在Java中

System.out.println( a == 2 ? ‘我‘ : true ? ‘你‘ : ‘它‘);和System.out.println( (a == 2 ? ‘我‘ : (true ? ‘你‘ : ‘它‘));等效!

而在PHP中,则不同:
echo $a == 2 ? ‘我‘ : $a==1 ? ‘你‘ : ‘它‘;

echo ($a == 2 ? ‘我‘ : $a==1 )? ‘你‘ : ‘它‘;
是等效的!

echo $a == 2 ? ‘我‘ : ($a==1 ? ‘你‘ : ‘它‘);是不等效的!
2.对于最后输出的结果,可以看出:
Java是属于多分支,所以有多个(3个:‘我‘ ‘你‘ ‘它‘)结果可以输出;
PHP最终解释成的只是双分支结果,结果只有2个(‘你‘ ‘它‘)可以输出

小结:

有挺久没碰过Java的代码了,还有就是不太知道表述的不知道是不是正确的!希望多多指正~

关于Java和PHP中三目运算符的优先级问题

原文:http://www.cnblogs.com/lms520/p/4986445.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!