java三目运算符

三目运算符在java中运用可以说非常的广泛,接下来我们就一起来看看三目运算符。
首先我们来看一下它的语法格式:
表达式1 ? 表达式2:表达式3;
表达式1必须是一个条件表达式或者返回值必须为boolean类型的。表达式2和表达式3则没有什么要求。其中还可以是嵌套的三目运算符。我们都知道,当表达式1的返回值为true时,返回表达式2的值。否则,返回表达式3的值。这是我们正常理解的。
接下来我们就看段代码:

public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char x = 'x';
		byte x1 = 2;
		String s = "str";
		int i = 0;
		System.out.println(true ? x:0);
		System.out.println(true ? x:i);
		System.out.println(false ? i:x);
		System.out.println(false ? x:i);
		System.out.println(false ? x:s);
		System.out.println(false ? x:x1);
		System.out.println(true ? x:x1);
	}
}

运行结果:
在这里插入图片描述
看了这个运行结果是不是感觉跟我们预想的结果不太一样,直到今天遇到这个题,我才发现原来在三目运算符中还存在这么一个潜规则。接下来就分享一下这个潜规则:
条件表达式的返回类型看冒号两边的类型:
(1)如果冒号两边,是同一种类型,那么就返回这个类型。
(2)如果其中一边的类型是byte、short或者char(暂且统称为X类型),而且另外一边是int常量(注意是常量),而且这个常量可以用X类型表示(也就是不溢出),那么,结果就是X类型。
System.out.println(true ? x : 0);中0是int常量,并且可以用x的类型char类型表示,所以条件表达式返回的是char类型,输出X。
例如:
System.out.println( true ? 98 : ‘a’);
输出: b
(3)如果不符合上述情况的,则自动隐式转换,即小范围的转换成大范围的,低精度的转换成高精度的类型,最后的结果就是转换后的类型。
System.out.println(false ? i : x);中i和x的类型不一样,返回int类型,88,输出的时候转化为字符串。
又如:
System.out.println( false ? 1.0 : ‘a’);
输出: 97.0
今天的分享就到这里了!欢迎大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值