三元运算符
格式
- 表达式1和表达式2为同种类型
- 三元运算符可以嵌套使用
例:m>n ? "m大" :((m=n)? "相等" :"n大");
- 如果程序既可以使用三元运算符,又可以使用if-else结构,优先选择三元运算符。
原因:简洁、执行效率高。
- 凡是可以使用三元运算符的地方,都可以改写为if-else。反之,不成立。
- 三元运算符与if-else的联系与区别:
- 三元运算符可简化if-else语句
- 三元运算符要求必须返回一个结果。
- if后的代码块可有多个语句
三元运算符的返回值
- 如果返回值1和返回值2都是同种类型,那么三目最终的返回类型就是这种类型
- 如果返回值1和返回值2不是同种类型,那么三目最终的返回类型是这两种类型的相同最小父类(最接近的父类,如果没有则返回Object,例如Integer和String最终返回的将是Object)。
- 两个都是变量,按照自动类型转换规则处理成一致的类型
- 两个都是常量
- 如果一个是char类型,
- 另一个是[0~65535](short、byte)之间的整数按char处理;
- 另一个是其他,按照自动类型转换规则处理成一致的类型;
- 没有char类型:按照自动类型转换规则处理成一致的类型
- 如果一个是char类型,
- 一个是变量,一个是常量:
- 如果变量是char类型,
- 另一个是[0~65535](short、byte)之间的整数按char处理;
- 另一个是其他,按照自动类型转换规则处理成一致的类型;
- 其余按照自动类型转换规则处理成一致的类型
char x = 'a';
System.out.println(true ? 120 : x);//x 120在0~65535(即int型之下)之间,返回值为char型
System.out.println(true ? 'a' : 12L);//97 返回值为long型
System.out.println(true ? 'a' : -1);//97
System.out.println(true ? 'a' : 12.0);//97.0
System.out.println(true ? 'a' : 12);//a
- 如果变量是char类型,
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。 只有单目运算符、三元运算符、 赋值运算符是从右向左运算的。