java三目运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java三目运算符相关的知识,希望对你有一定的参考价值。

public static int compare(Dates a)
return year>a.year?1
:year<a.year?-1
:month>a.month?1
:month<a.month?-1
:day>a.day?1
:day<a.day?-1:0;
请问这个三目运算符是怎么计算的啊

看到复杂嵌套的三目运算不要慌,慢慢的一层层剖析你会发现其实也就那样。

根据三目定义 exp?st1:st2,exp的结果是个boolean类型的数据,如果是true则执行st1,如果为false则执行st2,所以 三目等价于if(exp)st1elsest2,由此可见上述你给的可以更改成如下代码:

if(year>a.year)
                     return 1;
                 else
                     if(year<a.year)
                         return -1;
                     else
                         if(month>a.month)
                            return 1; 
                         else
                             if(month<a.month)
                                 return -1;
                             else
                                if(day>a.day)
                                    return 1;
                                 else
                                    if(day<a.day)
                                        return -1;
                                    else
                                        return 0;
                                    
                                
                             
                         
                     
                 

追问

三目运算顺序不是应该从右往左吗,你这从左往右了吧?

追答

弱弱的问下,你从那看到或听到的应从右往左?

追问

条件运算符的结合方向为"自右至左,自己去网上查查。。。

追答

x?a:b?c:d
三目运算符,结合方向确实为自右至左。
先看b?c:d的结果:若b为真结果为c,否者为d,记b?c:d的结果为z,则x?a:b?c:d等价为x?a:z。若x为真,结果为a,否则为z。

参考技术A 三目运算符a > b ? a : b运算规则是:如果?前面的等式为true,即a>b,则执行返回a,否则返回b;
先判断变量year是否大于对象a的year值,如果大于就返回1,小于就继续判断year是否小于对象a的year值,如果小于就返回-1;此后就是year==a.year的情况,依次判断月份和日追问

三目运算顺序不是应该从右往左吗,你这从左往右了吧?

追答

好像是从右到左,那你这样写还没if else效率高~~;其运算规则是从右到左,即先计算右则的表达式,也就是说你随便输出一个年月日,都要运行到最后一步,如果用if elseif else有可以第一步就判断出来了,还有就是你这么写逻辑不好理解,太复杂了!!

本回答被提问者采纳
参考技术B 这么狠的 三目 目测是 嵌套啊 谁写的 思路够强悍啊

Java中的三目运算符

1、问题背景

   下面代码执行的结果是:

   A、hai
   B、1987
   C、1988
   D、以上答案都不正确

/**
 * 三目运算符
 * A、hai
 * B、1987
 * C、1988
 * D、以上答案都不正确
 */
package com.you.model;

/**
 * @author YOUHAIDONG
 *
 */
public class YesNo 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		//声明一个整型变量you
		int you = 56;
		//字符串str
		String str = (you < 50) ? "hai":(you > 60) ? "1987":"1988";
		//打印str
		System.out.println(str);
	}

}

2、问题分析

(1)因为you这个变量为56,56是大于50的。为false,所以会是:(you > 60) ? "1987":"1988"

(2)又56是小于60的,为false,选:1988


3、问题答案

   1988







以上是关于java三目运算符的主要内容,如果未能解决你的问题,请参考以下文章

java三目运算符

java三目运算符

java 三目运算符

java三目运算符

java三目运算符

java啥叫“三目条件运算符”?