java里什么是三目表达式_浅谈Java三目运算

三目条件运算公式为 x?y:z  其中x的运算结果为boolean类型,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值

例:String s="";

String x="默认值";

s=s.isEmpty()?x:s;

这段代码的意思是:先判断s是否为空(结果是空),然后执行s=x,即执行x

再来一个复杂点的

class Dates {

int year,month,day;

Dates(int x,int y,int z){

year=x;

month=y;

day=z;

}

public static int compare(Dates a){

return year>a.year?1

:year

:month>a.month?1

:month

:day>a.day?1

:day

}

1、三目运算符 (表达式1)?(表达式2):(表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值为true,则整个表达式的值为表达式2的值,否则为表达式3的值

2、例子:int i = (5 > 3) ? (5 + 3) : (5 - 3);结果为i = 8.因为5 > 3为true,所以i = 5 + 3.

3、根据三目运算符的从右到左的结合性,我是这样划分的

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)))));

所以应该从最右边的那个表达式开始计算,结果应该是1、0、-1中的一个值。

以上纯属个人理解。没搞清楚你这个算法到底是什么意义。。。。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

### Java 三目运算符的使用方法与示例 Java 中的三目运算符是一种简洁的条件判断方式,其基本形式为 `condition ? value_if_true : value_if_false`。这种结构允许开发者在单行代码中完成简单的条件分支逻辑。 #### 基础用法 三目运算符的核心在于通过一个布尔表达式的真假来决定返回两个值中的哪一个。例如: ```java int a = 10; int b = (a == 1) ? 20 : 30; // 如果 a 等于 1,则 b 被赋值为 20;否则被赋值为 30。 System.out.println("Value of b is : " + b); b = (a == 10) ? 20 : 30; // 此处由于 a 等于 10,因此 b 将被赋值为 20。 System.out.println("Value of b is : " + b); ``` 上述代码展示了如何利用三目运算符基于简单条件执行不同操作[^2]。 #### 多条件下的嵌套使用 虽然不建议过度嵌套以保持代码可读性,但在某些情况下可以通过嵌套实现更复杂的逻辑。例如: ```java int score = 85; String grade = (score >= 90) ? "A" : (score >= 80) ? "B" : (score >= 70) ? "C" : (score >= 60) ? "D" : "F"; System.out.println("Grade: " + grade); ``` 此例子说明了如何通过连续的三目运算符构建一个多级评分系统[^1]。 #### 自动装箱与拆箱注意事项 当涉及包装类型时,需特别注意潜在的 NullPointerException 风险。这是因为三目运算符可能会触发自动拆箱行为。例如,在以下情况中可能引发异常: ```java Integer x = null; int y = (x != null) ? x : 0; // 可能抛出 NullPointerException ``` 为了避免此类问题,可以改写逻辑或者采用工具类如 `Objects.equals()` 来替代直接比较[^3]。 #### BigDecimal 的特殊处理 对于像 BigDecimal 这样的数值对象,推荐使用 `compareTo()` 方法代替传统的 `equals()` 方法来进行精确比较。这是因为在 BigDecimal 类型中,`equals()` 不仅比较数值还考虑精度差异,可能导致意外的结果[^4]。 ```java BigDecimal num1 = new BigDecimal("1.0"); BigDecimal num2 = new BigDecimal("1.00"); boolean isEqual = num1.compareTo(num2) == 0; // true // boolean isEqual = num1.equals(num2); // false ``` 以上片段解释了为什么在特定数据类型的条件下应该谨慎选择合适的比较手段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值